LeetCode热题100-将有序数组转换为二叉搜索树

给你一个整数数组 nums ,其中元素已经按 升序 排列,请你将其转换为一棵 平衡 二叉搜索树。

示例 1:

复制代码
输入:nums = [-10,-3,0,5,9]
输出:[0,-3,9,-10,null,5]
解释:[0,-10,5,null,-3,null,9] 也将被视为正确答案:

概念:

1. 二叉搜索树 BST

满足规则:

  • 左子树所有节点值 < 根节点值
  • 右子树所有节点值 > 根节点值
  • 左右子树也必须满足同上规则

有序数组中序遍历,出来就是升序序列

2. 平衡二叉树 AVL

满足规则:任意一个节点,左右子树的高度差绝对值 ≤ 1 这个高度差叫做平衡因子


二、平衡二叉搜索树 = 两者合体

同时满足两个条件:

  1. 是二叉搜索树(大小有序)
  2. 是平衡二叉树(左右高度差不超 1)
三、核心思路
  1. 对比左子树右子树
  2. 对称规则:
    • 左节点值 = 右节点值
    • 左孩子左分支 ↔ 右孩子右分支
    • 左孩子右分支 ↔ 右孩子左分支
  3. 终止条件:双双为空对称,单一为空不对称
python 复制代码
class Solution:
    def sortedArrayToBST(self, nums: List[int]) -> Optional[TreeNode]:
        def build(l, r):
            if l > r:
                return None
            mid = (l + r) // 2
            root = TreeNode(nums[mid])
            root.left = build(l, mid-1)
            root.right = build(mid+1, r)
            return root
        return build(0, len(nums)-1)
相关推荐
土司大王5 小时前
LeetCode hot100——对称二叉树
算法·leetcode·职场和发展
sali-tec5 小时前
C# 基于OpenCv的视觉工作流-章106-差值追踪
图像处理·人工智能·opencv·算法·计算机视觉
Navigator_Z5 小时前
LeetCode //C - 1208. Get Equal Substrings Within Budget
c语言·算法·leetcode
手写码匠6 小时前
Dify 多 Agent 工具权限与安全沙箱实战:让智能体“有能力,但不越权“
人工智能·深度学习·算法·aigc
黎阳之光6 小时前
打破堆场感知黑盒:黎阳之光视频孪生,构建港口码头网格化透明管控新体系
大数据·人工智能·算法·安全·数字孪生
大模型码小白6 小时前
AI 对话流性能调优:万级消息的虚拟滚动落地
java·大数据·前端·javascript·人工智能·算法·机器学习
sel_97 小时前
【多轮对话论文导读(三)】多轮对话与Agent论文阅读笔记:用户模拟、轨迹生成与长期记忆
论文阅读·人工智能·笔记·深度学习·算法·机器学习
Asize7 小时前
438. 找到字符串中所有字母异位词
算法
Asize8 小时前
283. 移动零
算法
船厂电气自动化ai大模型9 小时前
AI大模型与数学·第57课 傅里叶全套工具链综合实战:串联级数/连续变换/DFT/FFT,图像、音频、扩散模型完整例题
数据结构·人工智能·深度学习·算法·机器学习