Time Limit: 1000MS Memory limit: 65536K
题目描述
已知一颗二叉树的中序遍历序列和后序遍历序列,求二叉树的深度。
输入
输入数据有多组,输入50的字符串,第一个字符串表示二叉树的中序遍历,第二个表示二叉树的后序遍历。
输出
示例输入
2 dbgeafc dgebfca lnixu linux
示例输出
4 3
提示
来源
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
typedef struct node
{
char data;
struct node *lchild,*rchild;
}tree;
tree *creat(char *late,char *mid,int len)
{
tree *root;
if(len<=0)
root=NULL;
else
{
root=(tree *)malloc(sizeof(tree));
root->data=*(late+len-1); //依据后序遍历序列的最后一个元素
// 确定根节点
char *a;
for(a=mid;a!=NULL;a++)
if(*a==*(late+len-1))
break; //在中序序列中找到后序遍历序列中确定的根节点
int l=a-mid; //中序遍历过的元素
root->lchild=creat(late,mid,l);
root->rchild=creat(late+l,a+1,len-l-1); //根节点右边为右孩子
}
return root;
}
int deep(tree *root)
{
if(!root)
return 0;
int m,n;
m=deep(root->lchild);
n=deep(root->rchild);
return m>n?m+1:n+1;
}
int main()
{
int t;
scanf("%d",&t);
tree *root;
while(t--)
{
char str1[55],str2[55];
scanf("%s%s",str1,str2);
int l=strlen(str1);
root=creat(str2,str1,l);
printf("%d\n",deep(root));
}
return 0;
}