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)
相关推荐
KaMeidebaby1 小时前
卡梅德生物技术快报|单克隆抗体人源化 PEG 修饰质控方法体系构建与验证
服务器·前端·数据库·人工智能·算法·百度·新浪微博
不知名的老吴1 小时前
二叉树的遍历算法之先序遍历
算法
liu****1 小时前
第16届国赛蓝桥杯大赛C/C++大学B组
c语言·数据结构·c++·算法·蓝桥杯
SimpleLearingAI2 小时前
大模型推理框架总结解析
算法
ChoSeitaku2 小时前
04.数组
java·开发语言·数据结构
Σίσυφος19002 小时前
正则化数据并校准数据
人工智能·算法·机器学习
HZ·湘怡2 小时前
基于动态数组的栈(顺序栈)01
数据结构·算法
nazisami2 小时前
红黑树详解
数据结构·c++·面向对象·红黑树
Chen_harmony2 小时前
十八、C语言内存函数
c语言·算法