求!数据结构二叉树遍历
代码如下:
```c++
#include <stdio.h>
#include <stdlib.h>
typedef char Elemtype;
typedef struct BiTNode //树结点
{
Elemtype data;
struct BiTNode *lchild,*rchild; //指向左右子树的指针
} *BiTree;
BiTree CreateLink() //二叉树的递归创建
{
char data;
BiTree T;
scanf("%c",&data);//读入当前结点
if(data=='0')
{
return NULL;
}
else
{
T=(BiTree)malloc(sizeof(BiTNode));
T->data=data;
printf("请输入%c的左子树: ",data);
T->lchild=CreateLink();
printf("请输入%c的右子树: ",data);
T->rchild=CreateLink();
return T;
}
}
void visit(BiTree T)
{
printf("%c ",T->data);
}
//先序遍历%d
void PreOrder(BiTree T)
{
if(T==NULL) // 递归中遇到NULL,返回上一层节点
{
return;
}
printf("%c ",T->data);
PreOrder(T->lchild); // 递归遍历左子树
PreOrder(T->rchild); // 递归遍历右子树
}
//中序遍历
void InOrder(BiTree T)
{
if(T==NULL) // 递归中遇到NULL,返回上一层节点
{
return;
}
InOrder(T->lchild); // 递归遍历左子树
printf("%c ",T->data);
InOrder(T->rchild); // 递归遍历右子树
}
void PostOrder(BiTree T)
{
if(T==NULL) // 递归中遇到NULL,返回上一层节点
{
return;
}
PostOrder(T->lchild); // 递归遍历左子树
PostOrder(T->rchild); // 递归遍历右子树
printf("%c ",T->data);
}
int main()
{
BiTree T;
printf("请输入根节点数据: ");
T=CreateLink();
printf("先序遍历: ");
PreOrder(T);
printf("\n");
printf("中序遍历: ");
InOrder(T);
printf("\n");
printf("后序遍历: ");
PostOrder(T);
printf("\n");
return 0;
}
用此代码运算出来,如图所示,重复出现:“请输入 的左子树”
将此代码转化为int类型时,全部使用数字而非字母,就可以正常运行,不会出现错误
#include <stdio.h>
#include <stdlib.h>
typedef int Elemtype;
typedef struct BiTNode //树结点
{
Elemtype data;
struct BiTNode *lchild,*rchild; //指向左右子树的指针
} *BiTree;
BiTree CreateLink() //二叉树的递归创建
{
int data;
BiTree T;
scanf("%d",&data);//读入当前结点
if(data==-1)
{
return NULL;
}
else
{
T=(BiTree)malloc(sizeof(BiTNode));
T->data=data;
printf("请输入%d的左子树: ",data);
T->lchild=CreateLink();
printf("请输入%d的右子树: ",data);
T->rchild=CreateLink();
return T;
}
}
void visit(BiTree T)
{
printf("%d ",T->data);
}
//先序遍历
void PreOrder(BiTree T)
{
if(T==NULL) // 递归中遇到NULL,返回上一层节点
{
return;
}
printf("%d ",T->data);
PreOrder(T->lchild); // 递归遍历左子树
PreOrder(T->rchild); // 递归遍历右子树
}
//中序遍历
void InOrder(BiTree T)
{
if(T==NULL) // 递归中遇到NULL,返回上一层节点
{
return;
}
InOrder(T->lchild); // 递归遍历左子树
printf("%d ",T->data);
InOrder(T->rchild); // 递归遍历右子树
}
void PostOrder(BiTree T)
{
if(T==NULL) // 递归中遇到NULL,返回上一层节点
{
return;
}
PostOrder(T->lchild); // 递归遍历左子树
PostOrder(T->rchild); // 递归遍历右子树
printf("%d ",T->data);
}
int main()
{
BiTree T;
printf("请输入根节点数据: ");
T=CreateLink();
printf("先序遍历: ");
PreOrder(T);
printf("\n");
printf("中序遍历: ");
InOrder(T);
printf("\n");
printf("后序遍历: ");
PostOrder(T);
printf("\n");
return 0;
}