leetcode1008-前序遍历构造二叉搜索树

题目描述

  • 给出一个 BST 的前序遍历,构造二叉树
  • 数据保证可以构造

示例

输入:preorder = [8,5,1,7,10,12]
输出:[8,5,10,1,7,null,12]
输入: preorder = [1,3]
输出: [1,null,3]

题解

  • 思路
    • 方式一,排序得到中序遍历,用 先序+中序 递归构造(但不是最优解)
    • 方式二,因为是 BST,第一个元素是根,后面连续比根小的是左子树,剩下的是右子树,递归构造即可
func bstFromPreorder(preorder []int) *TreeNode {
    return dfs(preorder, 0, len(preorder))
}

func dfs(pre []int, l, r int) *TreeNode {
    if l == r { return nil }

    node := &TreeNode{Val: pre[l]}
    var i int
    for i = l + 1; i < r; i ++ {
        if node.Val < pre[i] {
            break
        }
    }

    node.Left = dfs(pre, l + 1, i)
    node.Right = dfs(pre, i, r)
    return node
}
posted @ 2025-08-26 21:14  余越  阅读(3)  评论(0)    收藏  举报