求二叉树的深度
Time Limit: 1000MS
Memory Limit: 65536KB
Problem Description
已知一颗二叉树的中序遍历序列和后序遍历序列,求二叉树的深度。
Input
输入数据有多组,输入T组数据。每组数据包括两个长度小于<font face="\"Times" new="" roman,="" serif\"="" style="box-sizing: border-box;">50的字符串,第一个字符串表示二叉树的中序遍历,第二个表示二叉树的后序遍历。
Output
输出二叉树的深度。
Example Input
2 dbgeafc dgebfca lnixu linux
Example Output
4 3
Hint
主要代码
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
struct node
{
int data;
struct node *left;
struct node *right;
};
struct node *creat(int n,char *z,char *h)
{
struct node *tree;
tree=(struct node *)malloc(sizeof(struct node));
if(n==0)
return NULL;
int i;
tree->data=h[n-1];
for(i=0; i<n; i++)
{
if(z[i]==h[n-1])
break;
}
tree->left=creat(i,z,h);
tree->right=creat(n-i-1,z+i+1,h+i);
return tree;
}
int deepth(struct node *tree)
{
int hl,hr,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()
{
char str[51];
char str1[51];
int n;
struct node *tree;
scanf("%d",&n);
while(n--)
{
scanf("%s",str);
scanf("%s",str1);
int len=strlen(str);
tree=creat(len,str,str1);
int k=deepth(tree);
printf("%d\n",k);
}
return 0;
}
#include<stdlib.h>
#include<string.h>
struct node
{
int data;
struct node *left;
struct node *right;
};
struct node *creat(int n,char *z,char *h)
{
struct node *tree;
tree=(struct node *)malloc(sizeof(struct node));
if(n==0)
return NULL;
int i;
tree->data=h[n-1];
for(i=0; i<n; i++)
{
if(z[i]==h[n-1])
break;
}
tree->left=creat(i,z,h);
tree->right=creat(n-i-1,z+i+1,h+i);
return tree;
}
int deepth(struct node *tree)
{
int hl,hr,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()
{
char str[51];
char str1[51];
int n;
struct node *tree;
scanf("%d",&n);
while(n--)
{
scanf("%s",str);
scanf("%s",str1);
int len=strlen(str);
tree=creat(len,str,str1);
int k=deepth(tree);
printf("%d\n",k);
}
return 0;
}