SDUT 3343 数据结构实验之二叉树四:还原二叉树
2018-06-17 23:36:59来源:未知 阅读 ()
数据结构实验之二叉树四:还原二叉树
Problem Description
给定一棵二叉树的先序遍历序列和中序遍历序列,要求计算该二叉树的高度。
Input
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 ****************************************************/
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
下一篇:poj1930解法(C++)
- 数据结构—链表 2020-05-29
- 图 2020-05-02
- 【数据结构】树套树——线段树套平衡树 2020-04-18
- 数据结构之顺序表的实现 2020-04-06
- 数据结构-线性表 2020-03-28
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash