二叉树
1 #include<iostream> 2 #include<cstdio> 3 #include<cmath> 4 #include<string> 5 #include<cstring> 6 #include<algorithm> 7 #include<cstdlib> 8 #define OVERFLOW 3 9 using namespace std; 10 typedef char TElemType; 11 TElemType ch; 12 typedef struct BiTNode 13 { 14 TElemType data; 15 struct BiTNode *lchild,*rchild; 16 }BiTNode,*BiTree; 17 18 19 //按前序输入二叉树中结点的值(一个字符) 20 //#表示空树,构造二叉链表表示二叉树T 21 void CreateBiTree(BiTree &T) 22 { 23 if(ch=='\n') 24 return; 25 scanf("%c",&ch); 26 if(ch=='#') 27 T=NULL; 28 else{ 29 T=(BiTree)malloc(sizeof(BiTNode)); 30 (T)->data=ch; 31 CreateBiTree(T->lchild); 32 CreateBiTree(T->rchild); 33 } 34 } 35 36 void PreOrder(BiTree T)//前序遍历二叉树 37 { 38 if(T!=NULL) 39 { 40 printf("%c",T->data); 41 PreOrder(T->lchild); 42 PreOrder(T->rchild); 43 } 44 } 45 void InOrder(BiTree T)//中序遍历二叉树 46 { 47 if(T!=NULL) 48 { 49 50 InOrder(T->lchild); 51 printf("%c",T->data); 52 InOrder(T->rchild); 53 } 54 } 55 void PostOrder(BiTree T)//后序遍历二叉树 56 { 57 if(T!=NULL) 58 { 59 PostOrder(T->lchild); 60 PostOrder(T->rchild); 61 printf("%c",T->data); 62 } 63 } 64 int cnt=0; 65 int countNode(BiTree T)//求二叉树中节点的个数 66 { 67 if(T) 68 { 69 cnt++; 70 countNode(T->lchild); 71 countNode(T->rchild); 72 } 73 return cnt; 74 } 75 76 77 int depthval=0; 78 int dl=0; 79 int dr=0; 80 int Depth(BiTree T)//求二叉树的高度 81 { 82 if(!T) 83 return 0; 84 else 85 { 86 dl=Depth(T->lchild); 87 dr=Depth(T->rchild); 88 depthval=1+(dl>dr?dl:dr); 89 return depthval; 90 } 91 } 92 int main() 93 { 94 BiTree T; 95 CreateBiTree(T); 96 PreOrder(T); 97 cout<<endl; 98 InOrder(T); 99 cout<<endl; 100 PostOrder(T); 101 cout<<endl; 102 return 0;//124##5##3## 103 }