18724 二叉树的遍历运算

18724 二叉树的遍历运算
时间限制:1000MS 代码长度限制:10KB

题型: 编程题 语言: 不限定
Description

二叉树的三种遍历都可以通过递归实现。
如果我们知道一棵二叉树的先序和中序序列,可以用递归的方法求后序遍历序列。
输入格式

两行,第一行一个字符串,表示树的先序遍历,第二行一个字符串,表示树的中序遍历。树的结点一律用小写字母表示。
输出格式

一个字符串,树的后序序列。
输入样例

abcde
bcade
输出样例

cbeda

#define _CRT_SECURE_NO_WARNINGS
#include<cstdio>
#include<iostream>
#include<vector>
#include<string>
#include<algorithm>
#include<queue>
using namespace std;

//中序   先序
char in[10005],pre[10005];

//递归  pl先序起点 pr先序终点 il中序起点  ir中序终点
void dfs(int pl,int pr,int il,int ir) {
	//出口是pl>pr
	if (pl > pr)return;
	//用ch存pl的元素
	char ch = pre[pl];
	int i;
	//在中序中找到ch的位置
	for (i = il; i<= ir;i++) {
		if (in[i] == ch)break;
	}
	//找到后两边即分为左子树和右子树
	//左子树长度
	int lenl = i - il;
	//右子树长度
	int lenr = ir - i;
	//递归左子树和右子树
	//此时左子树  先序起点  先序终点  中序起点  中序终点
	dfs(pl + 1, pl + lenl, il, il + lenl-1);
	//此时右子树  先序起点  先序终点  中序起点  中序终点
	dfs(pl + lenl +1,pr, i + 1, ir);
	//递归完后输出ch
	cout <<ch ;
}

int main()
{
	//从下标1开始输入
	cin >> (pre + 1) >> (in + 1);
	//长度下标要+1
int len1=strlen(pre + 1);
int len2=strlen(in + 1);
//递归
dfs(1, len1, 1, len2);
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值