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

题目描述

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

输入

输入数据占2行,其中第一行表示中序遍历结果,第二行为先序遍历结果。

输出

对测试数据,输出后序遍历结果。

样例输入

BFDAEGC
ABDFCEG

样例输出

FDBGECA

前序遍历ABDFCEG加粗的A即为根节点,在中序遍历中BFDAEGC,这样即可确认节点A的左子树的节点有BFD,右子树的节点有EGC,根据前序遍历的性质左子树的根节点为B,右子树的根节点为C

#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 h(string z,string x)
{
	if(!z.size()) return;
	char c;
	int k;
	c=x[0];
	k=z.find(c);//找到c的索引
	h(z.substr(0,k),x.substr(1,k));//z.substr(0,k):从索引为0的元素开始截取k位
	h(z.substr(k+1),x.substr(k+1));//z.substr(k+1):从索引为5的元素开始截取到末尾
	cout<<c;
}
signed main()
{	
	string z,x;
	cin>>z>>x;
	h(z,x);
	return 0;
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值