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

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

2017-08-16 19:31 295 查看

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

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

#include <bits/stdc++.h>
using namespace std;

typedef struct node
{
char data;
struct node *lchild, *rchild;

}BiTNode, *BiTree;
void createBiTree(BiTree &T, char front[], char mid[], int len)
{
if(len == 0)
{
T = NULL;
return ;
}
T = (BiTNode *)malloc(sizeof(BiTNode));
if(!T)
T = NULL;
T -> data = front[0];   //先序序列第一个字母即为树根
int t = 0;
while(front[0] != mid[t])   //在中序列中树根之前的为左子树
{
t++;
}
createBiTree(T -> lchild, front+1, mid, t);
createBiTree(T -> rchild, front+t+1, mid+t+1, len-t-1);

}
int deepth(BiTree T)
{
int depthval, depthleft, depthright;
if(!T)  //树为空,高度为0
depthval = 0;
else
{
depthleft = deepth(T -> lchild);   //左子树高度
depthright = deepth(T -> rchild);  //右子树高度
depthval = 1 + (depthleft > depthright ? depthleft : depthright);    //取左右子树高度高的为树的高度
}
return depthval;
}
int main()
{
int n;
BiTree T;
char front[100], mid[100];
while(cin >> n)
{
cin >> front >> mid;
createBiTree(T, front, mid, n);
cout << deepth(T) << endl;
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  二叉树