求二叉树的深度
Time Limit: 1000MS Memory limit: 65536K
题目描述
已知一颗二叉树的中序遍历序列和后序遍历序列,求二叉树的深度。
输入
输入数据有多组,输入T组数据。每组数据包括两个长度小于<font face="\"Times" new="" roman,="" serif\"="" style="padding: 0px; margin: 0px;">50的字符串,第一个字符串表示二叉树的中序遍历,第二个表示二叉树的后序遍历。
输出
输出二叉树的深度。
示例输入
2
dbgeafc
dgebfca
lnixu
linux
示例输出
4
3
提示
来源
示例程序
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
typedef struct node
{
int data;
struct node *lchild,*rchild;
}tree;
tree *creat(char *center,char *back,int n)
{
tree *root;
char *p;
if(n == 0)
root = NULL;
else
{
root = (tree *)malloc(sizeof(tree));
root->data = *(back + n - 1);
for(p = center;p < center + n;p++)
if(*p == root->data)
break;
int t;
t = p - center;
root->lchild = creat(center,back, t); //左子树
root->rchild = creat(p+1,back+t,n-(t+1)); //右子树
} // 中序开始 后序 长度
return root;
}
int depth(tree *root)
{
int h1,h2;
if(!root)
return 0;
else
{
h1 = depth(root->lchild);
h2 = depth(root->rchild);
if(h1 >= h2)
return h1+1;
else
return h2+1;
}
}
int main()
{
int n,t,k;
tree *root;
char center[1000],back[1000];
scanf("%d",&t);
while(t--)
{
k = 0;
scanf("%s %s",center,back);
n = strlen(center);
root = creat(center,back,n);
k = depth(root);
printf("%d\n",k);
}
return 0;
}