将一个按照升序排列的有序数组,转换为一棵高度平衡二叉搜索树。
本题中,一个高度平衡二叉树是指一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1。
示例:
给定有序数组: [-10,-3,0,5,9],
一个可能的答案是:[0,-3,9,-10,null,5],它可以表示下面这个高度平衡二叉搜索树:
0
/ \
-3 9
/ /
-10 5
# Definition for a binary tree node.
# 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 not nums:#nums == None or len(nums) == 0
return None
return self.dfs(nums,0,len(nums)-1)
def dfs(self,nums,l,r):
if l > r:
return None
if l == r:
return TreeNode(nums[l])
m = (l + r) // 2
root = TreeNode(nums[m])
root.left = self.dfs(nums,l,m-1)
root.right = self.dfs(nums,m+1,r)
return root