标签:大小写 include enter orm 序列 二叉树 ack time ace
给定一棵二叉树的先序遍历序列和中序遍历序列,要求计算该二叉树的高度。
9 ABDFGHIEC FDHGIBEAC
5
DQE:
本题为恢复二叉树,给出先序序列及中序序列,在二叉树的恢复问题中,已知先序和中序或者已知后序和中序即可恢复二叉树,原理为先序和后序可以获得根节点,从而分割中序序列得到左子树及右子树的中序序列,由此递归完成二叉树的恢复,本题采用指针+引用递归恢复,需对指针有一定的理解再阅读本代码。
1 #include <iostream> 2 #include <cstdio> 3 4 using namespace std; 5 6 struct Tree 7 { 8 char c; 9 Tree *lt,*rt; 10 }; 11 12 Tree *creat(char *&xx,char *zx) 13 { 14 if(*zx==‘\0‘) 15 return NULL; 16 char *x,*y; 17 Tree *r=new Tree; 18 int i=0; 19 while(zx[i]!=‘\0‘) 20 { 21 if(*xx==zx[i]) 22 { 23 r->c=zx[i]; 24 zx[i]=‘\0‘; 25 x=zx; 26 y=zx+i+1; 27 xx++; 28 r->lt=creat(xx,x); 29 r->rt=creat(xx,y); 30 break; 31 } 32 i++; 33 } 34 return r; 35 } 36 37 int dev(Tree *r) 38 { 39 if(r==NULL) 40 return 0; 41 int l=dev(r->lt),rr=dev(r->rt); 42 int m=l>rr?l:rr; 43 return m+1; 44 } 45 46 int main() 47 { 48 char xx[55],zx[55],*p; 49 Tree *root; 50 int n; 51 while(scanf("%d",&n)!=EOF) 52 { 53 scanf("%s%s",xx,zx); 54 p=xx; 55 root=creat(p,zx); 56 printf("%d\n",dev(root)); 57 } 58 return 0; 59 } 60 61 /*************************************************** 62 User name: *** 63 Result: Accepted 64 Take time: 0ms 65 Take Memory: 160KB 66 Submit time: 2016-11-03 19:06:10 67 ****************************************************/
标签:大小写 include enter orm 序列 二叉树 ack time ace
原文地址:http://www.cnblogs.com/Mimick/p/6031657.html