Description
根据给定的字符串生成二叉树并前序、中序、后序此二叉树。
Input
给定一字符串,其中#表示空。
例:上图输入为
HDB#A##C##G#FE###
Output
分别输出此二叉树前序、中序和后序。
Sample Input
HDB#A##C##G#FE###
Sample Output
HDBACGFE BADCHGEF ABCDEFGH
1 #include<stdio.h> 2 #include<string.h> 3 #include<stdlib.h> 4 #include<iostream> 5 using namespace std; 6 typedef struct BiTNode //定义结构体 7 { 8 char data; //数据 9 struct BiTNode *lchild,*rchild; //左右子树域 10 } BiTNode,*BiTree; 11 12 int CreateBiTree(BiTree &T)//建树 13 { 14 char data; 15 scanf("%c",&data); 16 if(data=='#') //遇到 # 的时候,就代表没有左孩子或者右孩子了 17 { 18 T=NULL; 19 } 20 else 21 { 22 T=(BiTree)malloc(sizeof(BiTNode));//开配空间 23 T->data=data;//存入数据 24 CreateBiTree(T->lchild);//去遍历左孩子 25 CreateBiTree(T->rchild);//去遍历右孩子 26 } 27 return 0; 28 } 29 void Visit(BiTree T) 30 { 31 if(T->data!='#') 32 printf("%c",T->data); 33 } 34 void Preorder(BiTree T)//前序遍历 根左右 35 { 36 if(T!=NULL) 37 { 38 Visit(T); 39 Preorder(T->lchild); 40 Preorder(T->rchild); 41 } 42 } 43 void Inorder(BiTree T)//中序遍历 左根右 44 { 45 if(T!=NULL) 46 { 47 Inorder(T->lchild); 48 Visit(T); 49 Inorder(T->rchild); 50 } 51 } 52 void Postorder(BiTree T)//后序遍历 左右根 53 { 54 if(T!=NULL) 55 { 56 Postorder(T->lchild); 57 Postorder(T->rchild); 58 Visit(T); 59 } 60 } 61 int main() 62 { 63 BiTree T; 64 CreateBiTree(T);//建树 65 Preorder(T);//前序 66 printf("\n"); 67 Inorder(T);//中序 68 printf("\n"); 69 Postorder(T);//后序 70 printf("\n"); 71 return 0; 72 }