首页 > 试题广场 >

二叉树后序遍历

[编程题]二叉树后序遍历
  • 热度指数:4916 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解
给定一个二叉树的前序遍历和中序遍历的序列,输出对应这个二叉树的后续遍历序列。

输入描述:
输入为一行。 两个字符串,分别表示二叉树的前序遍历和中序遍历结果,用空格分隔。保证数据合法


输出描述:
对应输出后序遍历序列
示例1

输入

ABDEC DBEAC

输出

DEBCA

看到很多人都是重建二叉树再后序遍历,其实可以直接算出后序遍历的字符串。

前序:ABDEC
中序:DBEAC
后序:DEBCA

第一轮递归中,我们可以找到规律:
根节点为A,左树节点为DBE,右树节点为C。
从这可以看出后序的结果是左树节点 + 右树节点 + A拼起来的,从而在每次递归里,将A放在最后即可。

完整代码:

var [preOrder, midOrder] = readline().split(/\s+/);
function computedPost(pre, mid) {
    var root = pre[0], strLen = pre.length;
    if (strLen < 1) {
        return ''
    } else if (strLen < 2) {
        return root;
    }

    var m = 0
    while (mid[m] !== root) {
        m++
    }

    return computedPost(
        pre.slice(1, m + 1),
        mid.slice(0, m)
    ) + computedPost(
        pre.slice(m + 1),
        mid.slice(m + 1)
    ) + root
}
print(computedPost(preOrder, midOrder))

编辑于 2020-01-29 10:42:24 回复(1)