从中序与后序遍历构造二叉树

一句话说明

后序最后一个元素是根,中序仍然负责切左右子树。

Go 代码

func buildTree(inorder []int, postorder []int) *TreeNode {
    pos := make(map[int]int)
    for i, v := range inorder {
        pos[v] = i
    }
 
    var build func(il, ir, pl, pr int) *TreeNode
    build = func(il, ir, pl, pr int) *TreeNode {
        if il > ir {
            return nil
        }
        rootVal := postorder[pr]
        mid := pos[rootVal]
        leftSize := mid - il
        root := &TreeNode{Val: rootVal}
        root.Left = build(il, mid-1, pl, pl+leftSize-1)
        root.Right = build(mid+1, ir, pl+leftSize, pr-1)
        return root
    }
 
    return build(0, len(inorder)-1, 0, len(postorder)-1)
}

相关主题


返回:树算法 | 算法学习导航