首页 > 代码库 > SDUT 3343 数据结构实验之二叉树四:还原二叉树
SDUT 3343 数据结构实验之二叉树四:还原二叉树
数据结构实验之二叉树四:还原二叉树
Time Limit: 1000MS Memory Limit: 65536KB
Submit Statistic
Problem Description
给定一棵二叉树的先序遍历序列和中序遍历序列,要求计算该二叉树的高度。
Input
输入数据有多组,每组数据第一行输入1个正整数N(1 <= N <= 50)为树中结点总数,随后2行先后给出先序和中序遍历序列,均是长度为N的不包含重复英文字母(区分大小写)的字符串。
Output
输出一个整数,即该二叉树的高度。
Example Input
9 ABDFGHIEC FDHGIBEAC
Example Output
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 ****************************************************/
SDUT 3343 数据结构实验之二叉树四:还原二叉树
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。