根据先序遍历和中序遍历重建二叉树

2022-05-05  本文已影响0人  Sun东辉

输入某二叉树的前序遍历和中序遍历的结果,请构建该二叉树并返回其根节点。

假设输入的前序遍历和中序遍历的结果中都不含重复的数字。

示例 1:

Input: preorder = [3,9,20,15,7], inorder = [9,3,15,20,7]
Output: [3,9,20,null,null,15,7]

示例 2:

Input: preorder = [-1], inorder = [-1]
Output: [-1]

限制:

0 <= 节点个数 <= 5000

解题思路:递归,先序序列决定根结点值,中序序列决定左右子树

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

func buildTree(preorder []int, inorder []int) *TreeNode {
    if len(preorder) < 1 {
        return nil
    }
    i := 0

    for ; i < len(inorder); i++ {
        if preorder[0] == inorder[i] {
            break
        }
    }
    root := new(TreeNode)
    root.Val = preorder[0]

    root.Left = buildTree(preorder[1:len(inorder[:i])+1], inorder[:i])
    root.Right = buildTree(preorder[len(inorder[:i])+1:], inorder[i+1:])
    return root
}

上一篇 下一篇

猜你喜欢

热点阅读