算法笔记练习 题解合集
题目
题目描述
小明在做数据结构的作业,其中一题是给你一棵二叉树的前序遍历和中序遍历结果,要求你写出这棵二叉树的后序遍历结果。
输入
输入包含多组测试数据。每组输入包含两个字符串,分别表示二叉树的前序遍历和中序遍历结果。每个字符串由不重复的大写字母组成。
输出
对于每组输入,输出对应的二叉树的后续遍历结果。
样例输入
DBACEGF ABCDEFG
BCAD CBAD
样例输出
ACBFGED
CDAB
思路
思路参考算法笔记 P294,根据思路独立实现了一遍代码。
代码
#include <iostream>
#include <string>
#include <queue>
using namespace std;
struct Node {
char data;
Node *lchild, *rchild;
};
string pre, in;
Node* create(int preL, int preR, int inL, int inR) {
if (preL > preR)
return nullptr;
Node* root = new Node;
root->data = pre[preL];
int k;
for (k = inL; k <= inR; ++k)
if (in[k] == pre[preL])
break;
root->lchild = create(preL + 1, preL + k - inL, inL, k - 1);
root->rchild = create(preL + k - inL + 1, preR, k + 1, inR);
return root;
}
void postOrder(Node *root) {
if (root->lchild)
postOrder(root->lchild);
if (root->rchild)
postOrder(root->rchild);
putchar(root->data);
}
int main() {
while (cin >> pre >> in) {
Node *root = create(0, pre.size() - 1, 0, in.size() - 1);
postOrder(root);
putchar('\n');
}
return 0;
}