数据结构实验之二叉树八:(中序后序)求二叉树的深度
Time Limit: 1000 ms Memory Limit: 65536 KiB
Problem Description
已知一颗二叉树的中序遍历序列和后序遍历序列,求二叉树的深度。
Input
输入数据有多组,输入T,代表有T组数据。每组数据包括两个长度小于50的字符串,第一个字符串表示二叉树的中序遍历,第二个表示二叉树的后序遍历。
Output
输出二叉树的深度。
Sample Input
2 dbgeafc dgebfca lnixu linux
Sample Output
4 3
Hint
Source
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct node
{
char data ;
struct node *L_child, *R_child;
};
struct node *Creat_Tree(char *, char *, int);
int Depth(struct node *);
int Max(int, int);
char Inorder[100], Postorder[100];
int main ()
{
int t, Length;
struct node *Root;
scanf("%d", &t);
while(t--)
{
scanf("%s %s", Inorder, Postorder);
Length = strlen(Inorder);
Root = Creat_Tree(Inorder, Postorder, Length);
printf("%d\n", Depth(Root));
}
return 0;
}
struct node *Creat_Tree(char *Inorder, char *Postorder, int Length)
{
struct node *Root;
int i;
if(Length <= 0)
return NULL;
else
{
Root = (struct node *)malloc(sizeof(struct node));
Root->data = Postorder[Length - 1];
for(i = 0; i < Length; i++)
{
if(Inorder[i] == Postorder[Length - 1])
break;
}
Root->L_child = Creat_Tree(Inorder, Postorder, i);
Root->R_child = Creat_Tree(Inorder + i + 1, Postorder + i, Length - i - 1);
}
return Root;
};
int Depth(struct node *Root)
{
if(Root == NULL)
return 0;
else
return Max(Depth(Root->L_child), Depth(Root->R_child)) + 1;
}
int Max(int x, int y)
{
if(x > y)
return x;
else
return y;
}