您的位置:首页 > 理论基础 > 数据结构算法

数据结构实验之二叉树四:还原二叉树

2016-10-20 13:59 543 查看

数据结构实验之二叉树四:还原二叉树

Time Limit: 1000MS
Memory Limit: 65536KB
SubmitStatistic

Problem Description

给定一棵二叉树的先序遍历序列和中序遍历序列,要求计算该二叉树的高度。

Input

输入数据有多组,每组数据第一行输入1个正整数N(1 <= N <= 50)为树中结点总数,随后2行先后给出先序和中序遍历序列,均是长度为N的不包含重复英文字母(区分大小写)的字符串。

Output

 输出一个整数,即该二叉树的高度。

Example Input

9
ABDFGHIEC
FDHGIBEAC


Example Output

5


Hint

 

Author

 xam

SDUTACM运维技术中心

Copyright © 2013-2014 SDUTACM Team. All Rights Reserved.

<pre name="code" class="cpp">#include <iostream>
#include <cstdio>
using namespace std;
struct tree {
char data;
tree *l, *r;
};
char a[50+5], b[50+5];
int n, ans;
tree *creat(int s1, int e1, int s2, int e2) {
tree *root;
int i=s2;
while(i<=e2) {
if(b[i]==a[s1])
break;
i++;
}
if(s1==e1&&s2==e2&&a[s1]==b[s2]) {
root=new tree;
root->data=a[s1];
root->l=NULL;
root->r=NULL;
}
else if(i>e2) root=NULL;
else {
root=new tree;
root->data=a[s1];
root->l=creat(s1+1,s1+i-s2,s2,i-1);
root->r=creat(s1+i-s2+1,e1,i+1,e2);
}
return root;
}
void pre_order(tree *root) {
if(root) {
printf("%c", root->data);
if(root->l)
pre_order(root->l);
if(root->r)
pre_order(root->r);
}
}
void tree_height(tree *root,int h) {
if(h>ans) ans=h;
if(root->l) tree_height(root->l,h+1);
if(root->r) tree_height(root->r,h+1);
}
int main()
{
while(~scanf("%d", &n)) {
scanf("%s %s", a, b);
tree *root=creat(0,n-1,0,n-1);
//pre_order(root);
//printf("*\n");
ans=1;
tree_height(root,1);
printf("%d\n", ans);
}
return 0;
}



                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: