求二叉树的深度
Time Limit: 1000ms Memory limit: 65536K 有疑问?点这里^_^
题目描述
已知一颗二叉树的中序遍历序列和后序遍历序列,求二叉树的深度。
输入
输入数据有多组,输入T,代表有T组数据。每组数据包括两个长度小于50的字符串,第一个字符串表示二叉树的中序遍历,第二个表示二叉树的后序遍历。
输出
输出二叉树的深度。
示例输入
2 dbgeafc dgebfca lnixu linux
示例输出
4 3
#include <stdio.h> #include <stdlib.h> #include <string.h> struct node { char a; struct node *l,*r; }*tree; char s[10001],s1[10001]; struct node *creat(struct node *root,char *s,char *s1,int n) { if(n<=0) return NULL; root=(struct node*)malloc(sizeof(struct node)); root->a=s[n-1]; int i; for(i=0;i<n;i++) if(s1[i]==s[n-1]) break; root->l=creat(root->l,s,s1,i); root->r=creat(root->r,s+i,s1+i+1,n-i-1); return root; } int treedeep(struct node *root) { int aa,ll,rr; aa=ll=rr=0; if(root->l==NULL&&root->r==NULL) return 1; if(root->l!=NULL) ll=treedeep(root->l); if(root->r!=NULL) rr=treedeep(root->r); aa=ll>rr?ll:rr; return aa+1; } int main() { int T; scanf("%d",&T); while(T--) { struct node *head; scanf("%s %s",s1,s); int l=strlen(s); head=creat(head,s,s1,l); int k=treedeep(head); printf("%d\n",k); } return 0; }