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)
相关推荐
萧西待水19 小时前
奥赛一本通 1447 靶形数独
算法·深度优先
梦帮科技21 小时前
AI 音乐产品的发布工程:验证门、数据发布、回滚与生产运维纪律
数据结构·数据库·架构·node.js·音视频·动态规划·推荐算法
泯泷21 小时前
那段文字是谁删的?Yjs 14 正式版之前,一套删除归属方案的实现与边界
前端·javascript·算法
hold?fish:palm21 小时前
34 合并K个升序链表
javascript·算法·链表
C++ 老炮儿的技术栈1 天前
我们在设计tcp协议时,要传一个字符串过去,报文:头十长度十内容,是否要把‘\0‘也填入,长度是否包含‘\0‘
开发语言·数据结构·c++·mfc·c
Navigator_Z1 天前
LeetCode //C - 1252. Cells with Odd Values in a Matrix
c语言·算法·leetcode
语戚1 天前
力扣 1621. 大小为K的不重叠线段的数目:动态规划(Java 实现)
java·算法·leetcode·动态规划·力扣·dp
青山木1 天前
Hot 100 --- 最长有效括号
java·数据结构·算法·leetcode·动态规划
这料鬼有毒1 天前
二刷hot100-1143.最长公共子序列
算法·leetcode·动态规划
政企项目老覃1 天前
边缘 AI 推理部署:安防零售场景下的模型裁剪与端侧落地实践
人工智能·程序人生·算法·性能优化·vllm