Description
小明在做数据结构的作业,其中一题是给你一棵二叉树的前序遍历和中序遍历结果,要求你写出这棵二叉树的后序遍历结果。
Input
输入包含多组测试数据。每组输入包含两个字符串,分别表示二叉树的前序遍历和中序遍历结果。每个字符串由不重复的大写字母组成。
Output
对于每组输入,输出对应的二叉树的后续遍历结果。
Sample Input
DBACEGF ABCDEFG BCAD CBAD
Sample Output
ACBFGED CDAB
C++实现
//
// main.cpp
// AN9.2-A
//
// Created by Vikill Blacks on 2021/3/29.
//
#include <iostream>
#include <queue>
#include <cstring>
using namespace std;
const int maxn = 10010;
char pre[maxn], in[maxn];
struct node {
char data;
node* lchild;
node* rchild;
};
node* create (int preL, int preR, int inL, int inR) {
if(preL > preR) {
return NULL;
}
node* root = new node;
root->data = pre[preL];
int k;
for(k = inL; k <= inR; k++) {
if(pre[preL] == in[k]) {
break;
}
}
int numLeft = k - inL; // 左子树结点个数
root->lchild = create(preL + 1, preL + numLeft, inL, k - 1);
root->rchild = create(preL + numLeft + 1, preR, k + 1, inR);
return root;
}
void AfterOrder(node* root) {
if(root == NULL){
return;
}
AfterOrder(root->lchild);
AfterOrder(root->rchild);
printf("%c", root->data);
}
int main(int argc, const char * argv[]) {
int preR, inR;
while(scanf("%s%s", pre, in) != EOF) {
preR = strlen(pre);
inR = strlen(in);
AfterOrder(create(0, preR - 1, 0, inR - 1));
printf("\n");
}
return 0;
}