Leetcodeleetcode

105. Construct Binary Tree from

2019-03-26  本文已影响3人  AnakinSun

根据前序和中序遍历结果,构建二叉树
前序遍历的第一个节点,是数的根节点
从中序序列中找到根节点,则左边的都是左子树,右边的都是右子树
然后递归处理

type TreeNode struct {
    Val   int
    Left  *TreeNode
    Right *TreeNode
}

func buildTree(preorder []int, inorder []int) *TreeNode {
    if len(preorder) == 0 {
        return nil
    }
    res := &TreeNode{
        Val: preorder[0],
    }
    if len(preorder) == 1 {
        return res
    }
    idx := func(val int, nums []int) int {
        for i, v := range nums {
            if v == val {
                return i
            }
        }
        return -1
    }(res.Val, inorder)
    if idx == -1 {
        return nil
    }
    res.Left = buildTree(preorder[1:idx+1], inorder[:idx])
    res.Right = buildTree(preorder[idx+1:], inorder[idx+1:])
    return res
}
上一篇下一篇

猜你喜欢

热点阅读