数据结构实验之二叉树八:(中序后序)求二叉树的深度
Time Limit: 1000MS
Memory Limit: 65536KB
Problem Description
已知一颗二叉树的中序遍历序列和后序遍历序列,求二叉树的深度。
Input
输入数据有多组,输入T,代表有T组数据。每组数据包括两个长度小于50的字符串,第一个字符串表示二叉树的中序遍历,第二个表示二叉树的后序遍历。
Output
输出二叉树的深度。
Example Input
2 dbgeafc dgebfca lnixu linux
Example Output
4 3
Hint
代码如下:
#include<bits/stdc++.h>
using namespace std;
struct node
{
char data;
struct node *left;
struct node *right;
};
struct node *Creat(int n,char *str,char *str1)
{
struct node *tree;
tree=new node;
if(n==0)
return NULL;
int i;
tree->data=str1[n-1];
for(i=0; i<n; i++)
{
if(str[i]==str1[n-1])
{
break;
}
}
tree->left=Creat(i,str,str1);
tree->right=Creat(n-i-1,str+i+1,str1+i);
return tree;
};
int Deepth(struct node *tree)
{
int hl,hr;
int max;
if(tree)
{
hl=Deepth(tree->left);
hr=Deepth(tree->right);
if(hl>=hr)
max=hl;
else
max=hr;
return max+1;
}
else return 0;
}
int main()
{
int t;
char str[100];
char str1[100];
struct node *tree;
cin>>t;
while(t--)
{
cin>>str;
cin>>str1;
int len=strlen(str);
tree=Creat(len,str,str1);
int k=Deepth(tree);
cout<<k<<endl;
}
return 0;
}