算法训练 求先序排列
时间限制:1.0s 内存限制:256.0MB
问题描述
给出一棵二叉树的中序与后序排列。求出它的先序排列。(约定树结点用不同的大写字母表示,长度<=8)。
给出一棵二叉树的中序与后序排列。求出它的先序排列。(约定树结点用不同的大写字母表示,长度<=8)。
输入格式
两行,每行一个字符串,分别表示中序和后序排列
输出格式
一个字符串,表示所求先序排列
样例输入
BADC
BDCA
样例输入
BADC
BDCA
样例输出
ABCD
代码:
#include<iostream>
#include<cstdio>
#include<string>
using namespace std;
string x, y;
void write(int p, int q, int m, int n)p到q是中序遍历对于的结点的范围,m到n是后序遍历对于的范围
{
if (p>q)return;
if (p == q) {
cout << x[p];
return;
}
int i, j, k;
k = x.find(y[n]);
cout << y[n];
write(p, k - 1, m, m + k - p - 1);
write(k + 1, q, m + k - p, n - 1);
}
int main()
{
int i, j, k;
cin >> x >> y;
k = x.length();
write(0, k - 1, 0, k - 1);
return 0;
}
思路:
通过后序遍历和中序遍历去求前序遍历,后序遍历的最后一个结点就是二叉树的根结点(同样适用它的左右子树)。
通过中序遍历找到根结点就可以判断它的左右子树了。用同样的方法对左右子树去写!!
这一题,参考的是其他的博主!