本题目要求用先序序列和中序序列构造一棵二叉树(树中结点个数不超过10个),并输出其后序序列。
输入格式:
在第一行中输入元素个数。
第二行中输入先序序列,用空格分隔。
第三行中输入中序序列,用空格分隔。
输出格式:
输出此二叉树的后序序列,用空格分隔,最后也有一个空格。
输入样例:
5
10 20 30 40 50
20 10 40 30 50
输出样例:
20 40 50 30 10
参考代码
#include <stdio.h>
int preIndex = 0;
// 函数来查找在中序序列中的索引
int search(int arr[], int strt, int end, int value) {
int i;
for (i = strt; i <= end; i++) {
if (arr[i] == value)
return i;
}
return -1;
}
// 用来构造二叉树的函数
void printPostOrder(int in[], int pre[], int inStrt, int inEnd) {
if (inStrt > inEnd)
return;
// 在中序序列中找到当前节点的索引
int inIndex = search(in, inStrt, inEnd, pre[preIndex++]);
// 先递归地构造左子树
printPostOrder(in, pre, inStrt,