数据结构实验之二叉树四:(先序中序)还原二叉树
Time Limit: 1000MS
Memory Limit: 65536KB
Problem Description
给定一棵二叉树的先序遍历序列和中序遍历序列,要求计算该二叉树的高度。
Input
输入数据有多组,每组数据第一行输入1个正整数N(1 <= N <= 50)为树中结点总数,随后2行先后给出先序和中序遍历序列,均是长度为N的不包含重复英文字母(区分大小写)的字符串。
Output
输出一个整数,即该二叉树的高度。
Example Input
9 ABDFGHIEC FDHGIBEAC
Example Output
5
Hint
Author
xam
#include<stdio.h>
#include<stdlib.h>
typedef struct node
{
char data;
struct node *lc, *rc;
}*Tree;
void creat(Tree &T, char a[], char b[], int n);
int depth(Tree T);
int main()
{
int n, d;
Tree T;
char a[55], b[55];
while(~scanf("%d", &n))
{
scanf("%s %s", a, b);
creat(T, a, b, n);
d = depth(T);
printf("%d\n", d);
}
return 0;
}
void creat(Tree &T, char a[], char b[], int n)
{
char *p;
int t;
if(n == 0)
T = NULL;
else
{
T = (Tree)malloc(sizeof(struct node));
T->data = a[0];
for(p = b; *p != '\0'; p++)
{
if(*p == a[0])
break;
}
t = p - b;
creat(T->lc, a+ 1, b, t);
creat(T->rc, a + 1 + t, p+ 1, n - t - 1);
}
}
int depth(Tree T)
{
int max = 0;
int x, y;
if(T)
{
x = depth(T->lc);
y = depth(T->rc);
max = x>y?(x+ 1):(y+1);
}
return max;
}
本文介绍了一种通过给定的先序和中序遍历序列来还原二叉树,并计算其高度的方法。输入包括节点数量及遍历序列,输出则是二叉树的高度。
693

被折叠的 条评论
为什么被折叠?



