108. Convert Sorted Array to Binary Search Tree
题目描述
给定一个有序升序数组,输出可能的平衡二叉树
Example:
Given the sorted array: [-10,-3,0,5,9]
One possible answer is: [0,-3,9,-10,null,5]
0
/ \
-3 9
/ /
-10 5
解题思路
平衡二叉树就是左右子树高度不能超过1。从数组的角度来看,每次取数组中间数作为根节点,可保证左右剩下的元素个数相差不超过1。
继续左子树的中间数作为根节点,继而又保证其左右剩下的元素个数相差不超过1。以此递归,最终能组成平衡二叉树。
数组的中间数作为根节点,左节点为数组左半部分的中间值,右节点为数组右半部分的中间数。当传入的数组为空时结束递归。
代码
class Solution:
def sortedArrayToBST(self, nums: List[int]) -> TreeNode:
return self.helper(nums, 0, len(nums)-1)
def helper(self, nums, left, right):
if left <= right:
mid = (left + right)//2
node = TreeNode(nums[mid])
node.left = self.helper(nums, left, mid-1)
node.right = self.helper(nums, mid+1, right)
return node