二叉树的遍历
#include <stdio.h>
#include <malloc.h>
typedef struct BiNode{
char date; //节点数据
struct BiNode *lchild,*rchild;//左右孩子指针
}BiNode,*Bitree;
void creatBitree(Bitree * T)
{
char c;
scanf("%c",&c);//输入字符
if(c=='#') *T = NULL; //保证是叶子节点
else
{
*T = (Bitree)malloc(sizeof(BiNode));
(*T)->date = c; //生成节点
creatBitree(&(*T)->lchild);//构造左子树
creatBitree(&(*T)->rchild);//构造右子树
}
}
void PreOrderTraverse(Bitree T)
{
if(T==NULL) return;
printf("%c",T->date); //输出根节点
PreOrderTraverse(T->lchild); //遍历左子树
PreOrderTraverse(T->rchild); //遍历右子树
}
void InOrderTraverse(Bitree T)
{
if(T==NULL) return;
InOrderTraverse(T->lchild); //遍历左子树
printf("%c",T->date); //输出根节点
InOrderTraverse(T->rchild); //遍历右子树
}
void PostOrderTraverse(Bitree T)
{
if(T==NULL) return;
PostOrderTraverse(T->lchild); //遍历左子树
PostOrderTraverse(T->rchild); //遍历右子树
printf("%c",T->date); //输出根节点
}
int main()
{
printf("请按先序输入二叉树(空间点用'#表示')\n");
Bitree T = NULL; //创建一个节点变量
creatBitree(&T); //建立二叉树
printf("开始先序遍历输出\n");
PreOrderTraverse(T);
printf("\n");
printf("开始中序遍历输出\n");
InOrderTraverse(T);
printf("\n");
printf("开始后序遍历输出\n");
PostOrderTraverse(T);
printf("\n");
return 0;
}