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

90 阅读1分钟

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

将一个按照升序排列的有序数组,转换为一棵高度平衡二叉搜索树。本题中,一个高度平衡二叉树是指一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1。

示例:

给定有序数组: [-10,-3,0,5,9],

一个可能的答案是:[0,-3,9,-10,null,5],它可以表示下面这个高度平衡二叉搜索树:

      0
     / \
   -3   9
   /   /
 -10  5
# class TreeNode:
#     def __init__(self, x):
#         self.val = x
#         self.left = None
#         self.right = None
class Solution:# 找到中点作为根节点,左侧数组作为左子树,右侧数组作为右子树
    def sortedArrayToBST(self, nums: List[int]) -> TreeNode:
        if nums:
            midPos = len(nums) // 2
            mid = nums[midPos]
            root = TreeNode(mid)  
            root.left = self.sortedArrayToBST(nums[:midPos])  
            root.right = self.sortedArrayToBST(nums[midPos + 1:])  
            return root
"""
平衡二叉搜索树需要保证俩点:
    左子树任意节点 < 根节点 < 右子树任意节点
    左右子数高度相差不超过 1
因为给定数组是升序,一个可行的递归条件可以得出:
    每次返回的根节点处于数组中间,左侧数组作为左子树,右侧数组作为右子树
    则 左子<根<右子,且所有节点左右子树节点数相差不超过 1 
   (由于递归的构树方式相同,所有节点都满足高度平衡)
"""