力扣(LeetCode) 108: 将有序数组转换为二叉搜索树 - 解法思路

问题概述

给定一个整数数组 nums,其中元素按 升序 排序,将其转换为 高度平衡 的二叉搜索树。

高度平衡 二叉树是指每个节点的两个子树的深度差不超过 1 的二叉树。

可视化说明

示例 1:将 [-10,-3,0,5,9] 转换为 BST

有序数组: [-10, -3, 0, 5, 9]
           ↑    ↑   ↑  ↑  ↑
           0    1   2  3  4

步骤 1: 中间元素(索引 2)= 0 成为根节点
        0
       / \
      
步骤 2: 左半部分 [-10, -3] → 左子树
        右半部分 [5, 9] → 右子树

        0
       / \
     -3   5
     /     \
   -10      9

关键洞察:分治法

  • 中间元素 = 根节点(确保平衡)
  • 左半部分 → 左子树
  • 右半部分 → 右子树
  • 递归应用于每一半

为什么这样有效

  1. BST 属性:由于数组已排序,中间元素将较小(左)和较大(右)的值分开
  2. 高度平衡:使用中间元素确保左右子树大小相似
  3. 最优:创建具有最小高度的平衡 BST

解法 1:递归(使用数组切片)

工作原理

在每次递归调用时使用数组切片创建子数组:

class Solution:
    def sortedArrayToBST(self, nums)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

yaoh.wang

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值