Description
已知一颗二叉树的中序遍历序列和后序遍历序列,求二叉树的深度。
Input
输入数据有多组,输入T,代表有T组数据。每组数据包括两个长度小于50的字符串,第一个字符串表示二叉树的中序遍历,第二个表示二叉树的后序遍历。
Output
输出二叉树的深度。
Sample
Input
2 dbgeafc dgebfca lnixu linux
Output
4 3
#include <iostream>
#include <bits/stdc++.h>
using namespace std;
typedef struct node
{
int data;
struct node *left;
struct node *right;
} tree;
char mid[55];
char last[55];
tree*creat(int len,char *mid,char *last)
{
tree*root;
if(len<=0)
{
return NULL;
}
else
{
root=(tree*)malloc(sizeof(tree));
root->data=last[len-1];
int i;
for(i=0;i<len;i++)
{
if(mid[i]==last[len-1])
{
break;
}
}
root->left=creat(i,mid,last);
root->right=creat(len-i-1,mid+i+1,last+i);
}
return root;
}
int high(tree*root)
{
if(root)
{
int h1,h2;
h1=high(root->left)+1;
h2=high(root->right)+1;
if(h1>h2)
{
return h1;
}
else
{
return h2;
}
}
return 0;
}
int main()
{
int n,x,t;
tree*root;
scanf("%d",&t);
while(t--)
{
scanf("%s",mid);
scanf("%s",last);
n=strlen(mid);
root=creat(n,mid,last);
x=high(root);
printf("%d\n",x);
}
return 0;
}