数据结构实验之二叉树八:(中序后序)求二叉树的深度
Problem Description
已知一颗二叉树的中序遍历序列和后序遍历序列,求二叉树的深度。
Input
输入数据有多组,输入T,代表有T组数据。每组数据包括两个长度小于50的字符串,第一个字符串表示二叉树的中序遍历,第二个表示二叉树的后序遍历。
Output
输出二叉树的深度。
Sample Input
2
dbgeafc
dgebfca
lnixu
linux
Sample Output
4
3
#include <bits/stdc++.h>
using namespace std ;
char zst[100],hst[100];
struct node
{
char data;
struct node *lc,*rc;
};
struct node *creat(int len,char zst[],char hst[])
{
if(len<=0)
return NULL;
int i;
struct node *root;
root=(struct node *)malloc(sizeof(struct node));
root->data=hst[len-1];
for(i=0; i<len; i++)
if(zst[i]==hst[len-1])
break;
root->lc=creat(i,zst,hst);
root->rc=creat(len-i-1,zst+i+1,hst+i);
return root;
}
int deep(struct node *root)
{
int d,d1,d2;
if(root==NULL)
return 0;
if(root->lc==NULL&&root->rc==NULL)
return 1;
d1=deep(root->lc);
d2=deep(root->rc);
if(d1>d2)
d=d1+1;
else
d=d2+1;
return d;
}
int main()
{
int len,t;
scanf("%d",&t);
while(t--)
{
scanf("%s %s",zst,hst);
len=strlen(zst);
struct node *root;
root=creat(len,zst,hst);
int d=deep(root);
printf("%d\n",d);
}
return 0 ;
}