利用二叉树中序及后序遍历确定该二叉树的先序序列

该博客主要讨论如何通过二叉树的中序遍历和后序遍历结果,来唯一确定其先序遍历序列。题目给出例子并提供了一段C++代码实现这一过程。代码通过递归方式,根据后序遍历的最后一个节点作为根节点,然后分别对左右子树进行递归操作,最终得出先序遍历序列。
摘要由CSDN通过智能技术生成

题目描述

已知二叉树的中序和先序遍历可以唯一确定后序遍历、已知中序和后序遍历可以唯一确定先序遍历,但已知先序和后序,却不一定能唯一确定中序遍历。现要求根据输入的中序遍历结果及后序遍历结果,要求输出其先序遍历结果。

输入

第一行为中序序列 第二行为后续序列

输出

输出为遍历二叉树得到的先序序列

样例

BFDAEGC
FDBGECA

样例输出

ABDFCEG

DCBFEG AH
DCFGEB HA,

A为根节点,在中序遍历中它的左边即为左子树(6个节点),右边为右子树(1个节点);在后序遍历中我们即可根据左右子树的节点个数确定后序遍历中的左右子树,根据后序遍历的性质,我们即可确定左右子树的根节点分别为:B,H。

#include<bits/stdc++.h>
#define ll long long
//#define int ll
#define pii pair<int,int>
#define mem(a,b) memset(a,b,sizeof(a))
#define endl '\n'
#define N 100005
const int inf=0x3f3f3f3f;
const double pi=acos(-1.0);
using namespace std;
void x(string z,string h)
{
	if(!z.size()) return;
	char c;
	int k;
	c=h[h.size()-1];
	k=z.find(c);//找到c的索引
	cout<<c;
	x(z.substr(0,k),h.substr(0,k));//z.substr(0,k):从索引为0的元素开始截取k位
	x(z.substr(k+1),h.substr(k,z.size()-k-1));//z.substr(k+1):从索引为5的元素开始截取到末尾
}
signed main()
{	
	string z,h;
	cin>>z>>h;
	x(z,h);
	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值