【C++】已知二叉树先序遍历+中序遍历 求后序遍历

题目:已知二叉树先序遍历+中序遍历 求后序遍历

对于一棵二叉树,给定其先序遍历的结果序列和中序遍历的结果序列,请写出其后序遍历的结果序列。

 

输入样例:

GDAFEMHZ(先序遍历的结果序列)

ADEFGHMZ(中序遍历的结果序列)

输出样例:

AEFDHZMG(后序遍历的结果序列)

 

思路分析👇

  • 因为前序遍历的首个元素即为根节点,且在中序遍历中根节点前的元素位于左子树,根节点后的元素位于右子树。
  • 利用这一性质,可以把问题看成一个递归问题
  • 递归过程是从前序遍历结果中找到中序遍历时根节点前的元素,构成了根的左子树的前序遍历结果,将二者作为参数再传入函数;再从前序遍历结果中找到中序遍历时根节点后的元素,构成了根的右子树的前序遍历结果,将二者作为参数再传入函数
  • 题目要求后序遍历的顺序输出,所以最后再输出根节点的元素值

代码示例👇

//author:Mitchell_Donovan
//date:4.25
#include<iostream>
using namespace std;

void run(string A, string B);

int main() {
	string pre;
	cout << "请输入后序遍历结果:";
	cin >> pre;
	string in;
	cout << "请输入中序遍历结果:";
	cin >> in;
	cout << "后序遍历结果:";
	run(pre, in);
}

void run(string A, string B) {
	if (B.length() == 0) {
		return;
	}
	if (B.length() == 1) {
		cout << A.front();
		return;
	}
	//substr(0,x)左闭右开
	//substr(x,y)左闭右闭
	//substr(x)左闭右末尾
	run(A.substr(1, B.find(A.front())), B.substr(0, B.find(A.front())));
	run(A.substr(B.find(A.front()) + 1), B.substr(B.find(A.front()) + 1));
    //根据后序遍历的顺序,最后再输出根节点的元素值
	cout << A.front();
}

输出示例👇

补充内容

👉substr(0,x)左闭右开
👉substr(x,y)左闭右闭
👉substr(x)左闭右末尾

  • 0
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Mitch311

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值