📅  最后修改于: 2023-12-03 15:23:02.699000             🧑  作者: Mango
本题是 ISRO CS 2008 的一道算法题,涉及到二叉树的建立和遍历。
已知一棵二叉树的前序序列和中序序列,要求重建出这棵二叉树并对其进行后序遍历。
具体要求如下:
void postorder(int pre[], int in[], int n)
pre
:长度为 n
的一维数组,表示二叉树的前序遍历序列;in
:长度为 n
的一维数组,表示二叉树的中序遍历序列;n
:表示二叉树中节点的个数。根据二叉树遍历的规律,前序遍历的第一个元素为根节点,而中序遍历中根节点左边的所有元素属于左子树,右边的所有元素属于右子树。
因此,可以通过递归的方式,根据前序序列和中序序列重建二叉树,并对树进行后序遍历。
具体实现过程如下:
void postorder(int pre[], int in[], int n) {
if (n == 0) return;
int root = pre[0];
int i, j;
for (i = 0; i < n; i++) {
if (in[i] == root) break;
}
postorder(pre + 1, in, i); // 递归重建左子树
postorder(pre + i + 1, in + i + 1, n - i - 1); // 递归重建右子树
printf("%d ", root); // 输出当前节点的数值
}