浙大数据结构:还原二叉树

7-1 还原二叉树 (8 分)

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

输入格式:
输入首先给出正整数N(≤50),为树中结点总数。下面两行先后给出先序和中序遍历序列,均是长度为N的不包含重复英文字母(区别大小写)的字符串。

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

输入样例:
9
ABDFGHIEC
FDHGIBEAC
输出样例:
5

代码

这里还添加了把整棵树重建起来的步骤,其实就是相当于对节点进行了一个访问(就是访问的过程不同)

#include<iostream>
#define Maxsize 50
using namespace std;
typedef char ElementType;
typedef char str[Maxsize];
typedef struct TreeNode* Tree;
struct TreeNode {
	ElementType Data;
	Tree left;
	Tree right;
	TreeNode() :left(NULL), right(NULL){}
};

Tree ReBuildTree(str s1, str s2,int l1,int r1,int l2,int r2) {
	if (l1 == r1) {
		Tree T = new TreeNode;
		T->Data = s1[l1];
		T->left = NULL;
		T->right = NULL;
		return T;
	}
	Tree T = new TreeNode;
	T->Data = s1[l1];
	char ch = s1[l1];
	int pos;
	for (pos = l2;pos <=r1 &&s2[pos] != ch; pos++) {}
	int num = pos - l2+1;//l2到pos有多少个数
	T->left = ReBuildTree(s1, s2, l1+1,l1+num-1,l2,pos-1);
	T->right = ReBuildTree(s1, s2, l1+num,r1,pos+1,r2);

	return T;
}

int MaxHight(Tree T) {
	if (T == NULL)return 0;
	int LH, RH, res;
	LH = MaxHight(T->left);
	RH = MaxHight(T->right);
	res = (LH > RH ? LH : RH) + 1;
	return res;
}

int main() {
	int N;
	cin >> N;
	str s1, s2;
	cin >> s1 >> s2;
	Tree T;
	T=ReBuildTree(s1, s2,0, N-1,0,N-1);
	cout << MaxHight(T);

	return 0;
}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值