LeetCode108 将有序数组转换为二叉搜索树

39 阅读1分钟

leetcode.cn/problems/co…

image.png

解法一:递归

示例 1 nums=[−10,−3,0,5,9]

我们从数组正中间的数 nums[2]=0 开始,把数组一分为二,得到两个小数组:

左:[−10,−3]。 右:[5,9]。

答案由三部分组成:

根节点:节点值为 nums[2]=0。

左子树:把 nums[2] 左边的 [−10,−3] 转换成一棵平衡二叉搜索树,作为答案的左儿子。这是一个和原问题相似的子问题,可以递归解决。

右子树:把 nums[2] 右边的 [5,9] 转换成一棵平衡二叉搜索树,作为答案的右儿子。这是一个和原问题相似的子问题,可以递归解决。

递归边界:如果数组长度等于 0,返回空节点。

/**
 * Definition for a binary tree node.
 * type TreeNode struct {
 *     Val int
 *     Left *TreeNode
 *     Right *TreeNode
 * }
 */
func sortedArrayToBST(nums []int) *TreeNode {
    if len(nums) == 0{
        return nil
    }
    // 数组中点为根节点
    half := len(nums)/2
    root := &TreeNode{
        Val: nums[half],
    }
    // 递归处理左右子数组
    root.Left = sortedArrayToBST(nums[:half])
    root.Right = sortedArrayToBST(nums[half+1:])
    return root
}