题目描述
已知一颗二叉树的中序遍历序列和后序遍历序列,求二叉树的深度。
输入
输入数据有多组,输入T组数据。每组数据包括两个长度小于<font face="\"Times" new="" roman,="" serif\"="" style="padding: 0px; margin: 0px;">50的字符串,第一个字符串表示二叉树的中序遍历,第二个表示二叉树的后序遍历。
输出
输出二叉树的深度。
示例输入
2 dbgeafc dgebfca lnixu linux
示例输出
4 3
提示
#include <iostream>
#include <stdio.h>
#include <string.h>
#include <queue>
using namespace std;
typedef struct node
{
char date;
node *lch,*rch;
} Bn,*Bt;
char pre[1000],ins[1000],post[1000];
void cbtree2(Bt &T,char *ins,char *post,int n)
{
if(n<=0)T=NULL;
else
{
int k=strchr(ins,post[n-1])-ins;
T=new Bn;
T->date=post[n-1];
cbtree2(T->lch,ins,post,k);
cbtree2(T->rch,ins+k+1,post+k,n-k-1);
}
}
int dep(Bt T)
{
int ddep=0;
if(!T) return ddep;
int nl=dep(T->lch);
int nr=dep(T->rch);
return (nl>nr?nl:nr)+1;
}
int main()
{
int x, n, i;
Bt head;
scanf("%d ",&n);
while(n--)
{
scanf("%s%s",ins,post);
cbtree2(head,ins,post,strlen(post));
x=dep(head);
printf("%d\n",x);
}
return 0;
}