题目描述
- 给出一个 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
}