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
(由于递归的构树方式相同,所有节点都满足高度平衡)
"""