Problem Description
已知一颗二叉树的中序遍历序列和后序遍历序列,求二叉树的深度。
Input
输入数据有多组,输入T,代表有T组数据。每组数据包括两个长度小于50的字符串,第一个字符串表示二叉树的中序遍历,第二个表示二叉树的后序遍历。
Output
输出二叉树的深度。
Example Input
2 dbgeafc dgebfca lnixu linux
Example Output
4 3
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
struct node
{
char data;
struct node *lchild, *rchild;
};
struct node *build(char zx[], char hx[], int is, int hs, int n)
{
struct node *root;
int k, i;
for(i = is; i < n + is; i++)
{
if(zx[i] == hx[hs + n - 1])
{
k = i;
break;
}
}
root = (struct node *)malloc(sizeof(struct node));
root->data = hx[hs + n - 1];
if(k == is)
root->lchild = NULL;
else
root->lchild = build(zx, hx, is, hs, k - is);
if(k == is + n - 1)
root->rchild = NULL;
else
root->rchild = build(zx, hx, k + 1, k - is, n - 1 - k + is);
return root;
};
int depth(struct node *root)
{
int dl,dr;
if(!root)
return 0;
else
{
dl = depth(root->lchild);
dr = depth(root->rchild);
if(dl > dr)
return (dl + 1);
else
return (dr + 1);
}
}
int main()
{
struct node *root;
char hx[100], zx[100];
int n, t;
scanf("%d", &t);
while(t--)
{
scanf("%s %s", zx, hx);
n = strlen(hx);
root = build(zx, hx, 0, 0, n);
printf("%d\n", depth(root));
}
return 0;
}