题目描述:
给你一个整数数组 nums
,其中元素已经按 升序 排列,请你将其转换为一棵 高度平衡 二叉搜索树。
高度平衡 二叉树是一棵满足「每个节点的左右两个子树的高度差的绝对值不超过 1 」的二叉树。
思路
要构建平衡二叉树,就要保证左右孩子节点高度一样,所以考虑使用分治法,将数组最中间的数作为根节点,按照这个节点将数组分成左右两部分,分别作为左右孩子,然后递归寻找两个子数组的中间的数。要注意这里不用实际分成两个数组,只需要将数组下标记住即可。
题解:
代码语言:python代码运行次数:0复制# Definition for a binary tree node.
class TreeNode:
def __init__(self, val=0, left=None, right=None):
self.val = val
self.left = left
self.right = right
class Solution:
def sortedArrayToBST(self, nums: List[int]) -> Optional[TreeNode]:
return self.build(nums,0,len(nums)-1)
def build(self,arr,left,right):
if left > right :
return None
mid = (left right) // 2
ans = TreeNode(arr[mid])
ans.left = self.build(arr,left,mid-1)
ans.right = self.build(arr,mid 1,right)
return ans