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

https://leetcode-cn.com/problems/convert-sorted-array-to-binary-search-tree/

解法一:

分治递归,每次取数组中点mid,并将数组划分为两部分,然后以mid为根,递归分治左右两部分为左右子树,这样左右子树的高度差都不会大于1。

结果不唯一,因为中点的取法不唯一,有可能偏左,也有可能偏右。

class Solution:
    def sortedArrayToBST(self, nums: List[int]) -> TreeNode:
        if len(nums) == 0:  #递归出口
            return None
        mid = len(nums) // 2    #数组长度为偶时,中点取偏右的
        #mid = (0 + len(nums)-1)//2    #也可以取偏左的
        root = TreeNode(nums[mid])
        root.left = self.sortedArrayToBST(nums[:mid])
        root.right = self.sortedArrayToBST(nums[mid+1:])
        return root

用辅助函数的写法:

class Solution:
    def sortedArrayToBST(self, nums: List[int]) -> TreeNode:      
        def helper(low, high):    #low,high为上下界
            if low > high:
                return
            mid = low + (high-low)//2    #划分中点
            root = TreeNode(nums[mid])
            root.left = helper(low, mid-1)
            root.right = helper(mid+1, high)
            return root
        return helper(0, len(nums)-1)

最后更新于