注意:
这个以先序遍历的结果构造二叉树,没有叶子节点的部分要用#或者其他符号代替。
#include <stdio.h>
#include <stdlib.h>
typedef struct BiTNode{
char data;
struct BiTNode *lchild, *rchild;
}BiTNode,*BiTree;
void CreateBiTree(BiTree &T){
char ch;
scanf("%c",&ch);
if(ch=='#') T=NULL;
else{
if(!(T=(BiTNode *)malloc(sizeof(BiTNode)))) return;
T->data=ch;
CreateBiTree(T->lchild);
CreateBiTree(T->rchild);
}
return;
}
void visit(BiTree tree){
printf("%c ",tree->data);
return;
}
//树的先序遍历
void preOrder(BiTree T){
if(T==NULL){
return;
}
visit(T);//先访问根节点
preOrder(T->lchild);//再访问左结点
preOrder(T->rchild);//最后访问右结点
}
//中序遍历
void midOrder(BiTree T){
if(T==NULL){
return;
}
midOrder(T->lchild);//先访问左结点
visit(T);//再访问根结点
midOrder(T->rchild);//最后访问右结点
}
void lastOrder(BiTree T){
if(T==NULL){
return;
}
lastOrder(T->lchild);//先访问左结点
lastOrder(T->rchild);//再访问右结点
visit(T);//最后访问根节点
}
int main() {
BiTree T;
CreateBiTree(T);
printf("先序遍历:");
preOrder(T);
printf("\n");
printf("中序遍历:");
midOrder(T);
printf("\n");
printf("后序遍历:");
lastOrder(T);
return 0;
}
输出的结果: