、假设二叉树结点的数据为字符,即
struct TreeNode {
char Data;
struct TreeNode * Left;
struct TreeNode * Right;
};
如果对该二叉树遍历打印,并且以#代表空树,那么可以得到一个字符串,例如下面的二叉树:(注:设二叉树的结点数据不能为字符#)
先序遍历结果为:ABC##DE##F###
编写程序,输入一个类似于上面先序遍历结果的字符串,根据此字符串建立二叉树。验证该二叉树是否正确。
#include<stdio.h>
#include<stdlib.h>
struct TreeNode{
char Data;
struct TreeNode *Left;
struct TreeNode *Right;
};
struct TreeNode *create_by_pre(struct TreeNode *T){
char ch;
printf("ch=");
scanf("%c",&ch);
getchar();
if(ch=='#'){
T=NULL;
}else{
T=(struct TreeNode *)malloc(sizeof(struct TreeNode));
T->Data=ch;
T->Left=create_by_pre(T->Left);
T->Right=create_by_pre(T->Right);
}
return T;
}
void preOrder(struct TreeNode *T){
if(T!=NULL){
printf("%c",T->Data);
preOrder(T->Left);
preOrder(T->Right);
}
}
void inOrder(struct TreeNode *T){
if(T!=NULL){
inOrder(T->Left);
printf("%c",T->Data);
inOrder(T->Right);
}
}
void postOrder(struct TreeNode *T){
if(T!=NULL){
postOrder(T->Left);
postOrder(T->Right);
printf("%c",T->Data);
}
}
int main(){
struct TreeNode *T=NULL;
T=create_by_pre(T);
printf("先序遍历:");
preOrder(T);
printf("\n中序遍历:");
inOrder(T);
printf("\n后序遍历:");
postOrder(T);
return 0;
}