已知一颗二叉树的中序遍历序列和后序遍历序列,求二叉树的深度。
输入数据有多组,输入T,代表有T组数据。每组数据包括两个长度小于50的字符串,第一个字符串表示二叉树的中序遍历,第二个表示二叉树的后序遍历。
2dbgeafcdgebfcalnixulinuxExample Output
43
#include<stdio.h>#include<string.h>#include<stdlib.h>typedef struct node{ char data; struct node *lc,*rc;}bitree;int max;bitree * create(int zlen,char hst[51], char zst[51]){ if(zlen<=0) return NULL; int i; bitree * t; t=(bitree *)malloc(sizeof(bitree)); t->data=hst[0]; for(i=0;i<zlen;i++) { if(zst[i]==hst[0]) break; } t->lc=create(i,hst-zlen+i,zst); t->rc=create(zlen-i-1,hst-1,zst+i+1); return t;}void pre_show(int count,bitree * t){ int k; if(t) { if(count==0) count=1; k=count; if(k>max) max=k; pre_show(++k,t->lc); pre_show(++count,t->rc); }}int main(){ int zlen,hlen,t; char zst[51],hst[51]; bitree * tree; scanf("%d",&t); while(t--) { max=0; scanf("%s%s",zst,hst); zlen=strlen(zst); hlen=strlen(hst); tree=create(zlen,hst+hlen-1,zst); pre_show(0,tree); printf("%d/n",max); } return 0;}
新闻热点
疑难解答