数据结构实验之二叉树四:还原二叉树
Time Limit: 1000ms Memory limit: 65536K 有疑问?点这里^_^
题目描述
给定一棵二叉树的先序遍历序列和中序遍历序列,要求计算该二叉树的高度。
输入
输入数据有多组,每组数据第一行输入
1
个正整数
N(1 <= N <= 50)
为树中结点总数,随后
2
行先后给出先序和中序遍历序列,均是长度为
N
的不包含重复英文字母
(
区分大小写
)
的字符串。
输出
输出一个整数,即该二叉树的高度。
示例输入
9 ABDFGHIEC FDHGIBEAC
示例输出
5
提示
来源
xam
示例程序
#include <bits/stdc++.h>
using namespace std;
int cnt, Max;
char a[1100], b[1100];
struct node
{
char data;
node *lchild, *rchild;
} *root;
struct node *creat()
{
node *root;
root = new node;
root->lchild = NULL;
root->rchild = NULL;
return root;
}
struct node *build(int low, int high, int _begin)
{
int flag;
if(low > high)
return NULL;
struct node *root;
root = creat();
root->data = a[_begin];
for(int i = low; i <= high; i++)
{
if(a[_begin] == b[i])
{
flag = i;
break;
}
}
root->lchild = build(low, flag-1, _begin+1);
root->rchild = build(flag+1, high, _begin+flag+1-low);
return root;
}
void high(struct node *root, int cnt)
{
if(root)
{
if(cnt> Max)
Max = cnt;
high(root->lchild, cnt+1);
high(root->rchild, cnt+1);
}
}
//int high(struct node *root)
//{
// int highleft, highright;
// if(root)
// {
// highleft = high(root->lchild);
// highright = high(root->rchild);
// return max(highleft, highright)+1;
// }
// else
// return 0;
//}
int main()
{
int n;
while(cin >> n)
{
cin >> a;
cin >> b;
root = build(0, n-1, 0);
Max=0;
high(root, 1);
printf("%d\n", Max);
//cout << high(root) << endl;
}
return 0;
}