求先序序列
后序序列的最后一个是根节点,在中序序列中找到根节点,可将序列分为左子树和右子树,然后递归处理左右子树,输出先序序列。
#include <bits/stdc++.h>
using namespace std;
string b, a;
// 递归求先序
void ans (int x, int y, int p, int q) {
if (x > y || p > q) return;
char root = a [y]; // 后序最后一个元素是根节点
cout << root; // 优先输出根节点
int i = b.find (root); // 中序中找到根节点位置,分割左右子树
int left = i - p; // 左子树节点个数
ans (x, x + left - 1, p, i - 1);
ans (x + left, y - 1, i + 1, q);
}
int main() {
cin >> b >> a;
int len = a.length() - 1;
ans(0, len, 0, len);
return 0;
}
时间复杂度: O(n^ 2 )空间复杂度: O(n)
