leetcode108. 将有序数组转换为二叉搜索树[easy](python)

2023-10-19 19:20:32 浏览数 (1)

题目描述:

给你一个整数数组 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
运行内存与时间运行内存与时间

0 人点赞