上篇写了个用先序序列和中序序列得到后序序列的题目
写的有点繁琐,这次来个简洁点的。
思路都是一样的
题目如下
题目描述
给出一棵二叉树的中序与后序排列。求出它的先序排列。(约定树结点用不同的大写字母表示,长度\le 8≤8)。
输入格式
22行,均为大写字母组成的字符串,表示一棵二叉树的中序与后序排列。
输出格式
11行,表示一棵二叉树的先序。
输入输出样例
输入 #1复制
BADC
BDCA
输出 #1复制
ABCD
直接上代码:思路简单不解释
#include<bits/stdc++.h>
using namespace std;
int N;
string pre,re,in;
void dfs(int reL,int reR,int inL,int inR) {
if(reL>reR||inL>inR) return;
char v = re[reR];
putchar(v);
int k;
for(k=inL;k<=inR;k++) {
if(in[k]==v) break;
}
int lenL = k-inL;
dfs(reL,reL+lenL-1,inL,inL+lenL-1);
dfs(reL+lenL,reR-1,k+1,inR);
}
int main(){
cin >> in >> re;
dfs(0,(int)re.length()-1,0,(int)in.length()-1);
}