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

力扣题目链接

将一个按照升序排列的有序数组,转换为一棵高度平衡二叉搜索树。

本题中,一个高度平衡二叉树是指一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1。

解题思路

题目要求将一个有序数组转换为高度平衡的二叉搜索树(Binary Search Tree,简称BST)。在BST中,左子树的所有节点值都小于根节点值,右子树的所有节点值都大于根节点值。为了使得树高度平衡,根节点的选择非常关键,通常选择数组的中间元素作为根节点,这样左右子树的节点数量差不多相等,从而保证树的高度平衡。

完整代码如下:

class Solution:
    def traversal(self, nums: List[int], left: int, right: int) -> TreeNode:
        if left > right:
            return None
        
        mid = left + (right - left) // 2
        root = TreeNode(nums[mid])
        root.left = self.traversal(nums, left, mid - 1)
        root.right = self.traversal(nums, mid + 1, right)
        return root
    
    def sortedArrayToBST(self, nums: List[int]) -> TreeNode:
        root = self.traversal(nums, 0, len(nums) - 1)
        return root
def traversal(self, nums: List[int], left: int, right: int) -> TreeNode:
    if left > right:
        return None
    
    mid = left + (right - left) // 2
    root = TreeNode(nums[mid])
    root.left = self.traversal(nums, left, mid - 1)
    root.right = self.traversal(nums, mid + 1, right)
    return root

traversal函数是递归地构建二叉搜索树的核心部分。它通过分治法将数组分成左右两部分,递归地构建树的左右子树。

  • 输入参数:

    • nums: 输入的有序数组。
    • left: 当前子数组的左边界索引。
    • right: 当前子数组的右边界索引。
  • 处理逻辑:

    1. 递归终止条件: 当left > right时,说明当前子数组为空,无法再继续分割,此时返回None,表示当前节点不存在。
    2. 选择中间元素作为根节点: 计算中间索引mid = left + (right - left) // 2,然后用这个索引对应的元素nums[mid]创建当前子树的根节点root
    3. 递归构建左右子树:
      • 左子树由数组左半部分构成,递归调用self.traversal(nums, left, mid - 1)
      • 右子树由数组右半部分构成,递归调用self.traversal(nums, mid + 1, right)
    4. 返回根节点: 最后返回当前构建的根节点root
def sortedArrayToBST(self, nums: List[int]) -> TreeNode:
    root = self.traversal(nums, 0, len(nums) - 1)
    return root

这个函数是整个程序的入口函数。它接受一个有序数组nums作为输入,并调用traversal函数将该数组转换为一个高度平衡的二叉搜索树,最终返回生成的树的根节点。

  • nums: 输入的有序数组。
  • root: 由traversal函数生成的二叉搜索树的根节点。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值