题目描述:
已知某二叉树的先序序列和中序序列,编程计算并输出该二叉树的后序序列。
输入输出:
有多组数据,每组分为两行输入,第一行表示指定二叉树的先序序列,第二行表示该二叉树的中序序列,序列元素均为大写英文字符,表示二叉树的结点。
对于每组数组,在一行上输出该二叉树的后序序列。
代码(c++):
#include<iostream>
#include<string>
using namespace std;
typedef struct Tree {
char ch;
Tree* lchild;
Tree* rchild;
Tree(char ch) :ch(ch) {}
}Tree;
// 建树
Tree* build(string prior, string inorder) {
if (prior.length() == 0)
return NULL;
char ch = prior[0];
Tree* root = new Tree(ch);
int index = inorder.find(ch);
root->lchild = build(prior.substr(1, index), inorder.substr(0, index));
root->rchild = build(prior.substr(index + 1), inorder.substr(index + 1));
return root;
}
// 后序遍历
void postorder(Tree* root) {
if (root == NULL) return;
postorder(root->lchild);
postorder(root->rchild);
cout << root->ch;
}
int main() {
string prior, inorder;
while (cin >> prior >> inorder) {
Tree* root = build(prior, inorder);
postorder(root);
cout << endl;
}
return 0;
}