解法一:递归
示例 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
}