二叉树的遍历(前序遍历中序遍历后序遍历

在这里插入图片描述
给树的后序和中序遍历,求先序遍历
假设有一棵树长这样
在这里插入图片描述
很容易写出他的后序遍历DBAGFEC
也很容易写出他中序遍历DABCGEF
在这里插入图片描述

1.后序遍历是前后根,根节点永远是最后一个,因此我们可以找到根节点c
2.要我们输出前序遍历,因为根节点永远在前面,所以每次找到就输出就好了
3.之后用find函数找到根节点c在中序遍历中的位置,划分为两段DAB GEF,然后中序遍历这两段,注意一定要是先递归DAB再递归GEF不然的话就是根后前而不是根前后了
4.也将后序遍历划分为两段DAB GFE,用后序遍历递归下去

好了,直接上代码

#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
void dg(string a,string b) {
	if (a.size() > 0) {
		char c = b[b.size() - 1];
		cout << c;
		int k = a.find(c);
		dg(a.substr(0, k), b.substr(0, k));
		dg(a.substr(k + 1), b.substr(k ,b.size()-k-1));
	}·
}
int main() {
	ios::sync_with_stdio(false);
	string in,aft;
	cin >> in >> aft;
	dg(in, aft);
}

给出前序遍历和中序遍历求后序遍历

#include<iostream>

using namespace std;
void dfs(string a, string b) {
	if (a.size() <= 0)return;
	char c = b[0];
	
	int x = a.find(c);
	dfs(a.substr(0, x), b.substr(1, x));
	dfs(a.substr(x + 1), b.substr(b.size()-x));
	cout << c;
}
int main() {
	string a, b;
	cin >> a >> b;
	dfs(a, b);
}

在这里插入图片描述

给出前序遍历和后序遍历求中序遍历


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值