平衡二叉搜索树
📅 2026/7/30 18:42:30
👁️ 次浏览
一、定义平衡二叉搜索树Balanced Binary Search Tree简称 BBST是在二叉搜索树BST的基础上增加了 [平衡约束] 的特殊二叉树。它的核心目标是避免二叉树退化成链表让树的高度始终维持在 O log n量级从而保证查找、插入、删除操作的时间复杂度稳定为 O log n)。它必须同时满足两个核心属性1.二叉搜索树属性任意节点的左子树所有节点值 该节点值 右子树所有节点值中序遍历可得到有序序列。(也就是左根右2.平衡属性任意节点的左右子树高度差被限制在合理范围内不会出现一侧子树极长、另一侧极短的失衡情况。平衡的核心调整方式旋转当插入、删除节点破坏了平衡约束时树会通过旋转操作在不改变二叉搜索树性质的前提下调整节点的层级关系恢复平衡状态。基础旋转分为两类右旋将左孩子提升为新的根原根下沉为右孩子解决左子树过高的失衡。左旋将右孩子提升为新的根原根下沉为左孩子解决右子树过高的失衡。对于更复杂的失衡场景如子树方向不一致会组合使用两次旋转左右双旋、右左双旋。两种最经典的实现类型不同的平衡约束标准衍生出了不同的平衡二叉搜索树实现最具代表性的是以下两种1. AVL 树严格平衡平衡规则任意节点的左右子树高度差称为「平衡因子」的绝对值不超过 1。特点平衡要求最严格树的高度最低查找性能最优但插入、删除时触发旋转的频率更高、开销更大。适合查找频繁、修改较少的场景。2. 红黑树近似平衡平衡规则通过给节点标记红 / 黑两种颜色配合 5 条性质约束保证从根到任意叶子节点的最长路径长度不超过最短路径的 2 倍。特点平衡要求相对宽松插入、删除最多只需要 2 次旋转即可恢复平衡修改性能远优于 AVL 树查找性能略逊但仍为 O (log n)。是工业界应用最广的平衡二叉搜索树。接下来我们将用leetCode上的一道题目来深入了解一下这个知识点示例给你一个整数数组nums其中元素已经按升序排列请你将其转换为一棵高度平衡二叉搜索树。高度平衡二叉树是一棵满足「每个节点的左右两个子树的高度差的绝对值不超过 1 」的二叉树。示例与约束示例 1输入nums [-10,-3,0,5,9]输出[0,-3,9,-10,null,5]说明选取左中点构造[0,-10,5,null,-3,null,9]同样为正确答案。图1示例 2输入nums [1,3]输出[3,1]说明[1,null,3]和[3,1]均满足高度平衡要求。图2提示1 nums.length 10^4-10^4 nums[i] 10^4nums按严格递增顺序排列二、核心思路中序序列 二分根节点 平衡 BST升序数组本质就是二叉搜索树的中序遍历序列但仅靠中序遍历无法唯一确定一棵 BST。题目额外要求「高度平衡」这就给出了确定根节点的唯一最优策略要让树平衡必须让左右子树的节点数量尽可能接近因此选择数组的中间元素作为根节点。递归构造流程确定根节点取当前数组区间的中点mid以nums[mid]作为当前子树的根节点保证左右子树节点数差不超过 1。递归构造左子树使用区间[left, mid-1]的元素构建左子树作为根节点的左孩子。递归构造右子树使用区间[mid1, right]的元素构建右子树作为根节点的右孩子。递归边界当left right时区间为空返回空节点None。三、Python代码实现from typing import List, Optional # LeetCode 标准二叉树节点定义 class TreeNode: def \_\_init\_\_(self, val0, leftNone, rightNone): self.val val self.left left self.right right class Solution: def sortedArrayToBST(self, nums: List[int]) - optional[TreeNode]: if left right: return None #计算左中点 mid left (right - left) // 2 #以中点元素作为当前子树的根 root TreeNode(nums[mid]) #递归构建左右子树 root.left build(left, mid - 1) root.right build(mid 1, right) return root #初始区间整个数组 return build(0, len(nums) - 1)代码细节说明中点选取代码中mid left (right - left) // 2选取左中点若需选取右中点可改为mid left (right - left 1) // 2两种写法均符合题目要求对应不同的合法输出。区间设计使用左右闭区间[left, right]边界条件清晰递归终止条件直观。时间效率每个节点仅创建一次无重复计算是构造平衡 BST 的最优解法。四、拓展与延伸迭代法实现可通过栈模拟递归过程或用队列按层构造核心逻辑依然是二分区间划分适合对递归栈深度有顾虑的场景。与动态平衡树的对比本题属于静态构建平衡树一次性生成平衡结构而 AVL 树、红黑树属于动态维护平衡树在插入 / 删除节点时通过旋转维持平衡二者是平衡树的两种典型实现思路。同源延伸题目LeetCode 109. 有序链表转换二叉搜索树思路完全一致但链表无法随机访问中点需配合快慢指针定位中点。五、总结本题的核心是利用「有序数组 BST 中序序列」的性质通过二分法选取根节点天然保证平衡性是分治思想在树结构中的经典应用。整体代码简洁、逻辑严谨是二叉搜索树与平衡树知识点的基础必刷题掌握后可举一反三解决同类构造类题目。
文章目录 引言(文章快速预览) 需求概述 技术实现 验证方法 I 需求 迁移备注字段到生产任务单号 需求优化 II 实现 查看当前数据库的排序规则 快速验证小测试:“中文”是否被正确拦截了 SELECT 预览 对应的 UPDATE 语句 查看迁移之后的数据 完整sql 引言(文章快速预览)
SQ…
📅 2026/7/30 18:42:30
一、滑动窗口模板问题类型典型题干关键词固定长度?例题1. 最长/最短子数组满足某条件“最长”“最短”“连续”可变最长无重复子串、最短覆盖子串2. 固定长度子数组统计“长度为 k 的连续”固定长度为 k 的最大平均值、固定大小子数组的最大和3. 计数/是否存在满足条…
📅 2026/7/30 18:42:30
随着数字化阅读的兴起和共享经济的蓬勃发展,构建一个高效、便捷的图书共享平台显得尤为重要。本设计旨在基于Spring Boot后端框架与Vue前端框架,开发一款名为“悦读圈”的图书共享平台,以满足用户对图书资源的多样化需求,并促进图…
📅 2026/7/30 18:41:30
1. 从“字长”说起:计算机底层设计的基石干了这么多年硬件和底层软件,我发现很多朋友在入门计算机体系结构时,对“字长”这个概念总是一知半解。机器字长、存储字长、指令字长,这三个词听起来很像,但它们在CPU设计、内…
📅 2026/7/31 4:01:48
1. 从一次“诡异”的查询说起:为什么list.contains在 MyBatis 里不是你想的那样那天下午,我正对着一个看似简单的需求挠头。后端接口接收一个用户ID列表List<Long> userIds,需要从数据库里查询出所有在这个列表中的用户信息。这太常见了…
📅 2026/7/31 4:01:48
haproxy概述什么是 HAProxyHAProxy 全称 High Availability Proxy,是一款免费、开源、高性能的 TCP/HTTP 反向代理、负载均衡软件,使用 C 语言开发。支持 四层(TCP)负载均衡 七层(HTTP/HTTPS)负载均衡跨平…
📅 2026/7/31 4:01:48
1. Go语言指针深度解析指针是Go语言中一个关键但常被初学者误解的概念。与C/C不同,Go的指针设计更加安全,但同样强大。我们先看一个基础示例:var x int 10
var p *int &x
fmt.Println(*p) // 输出10这里p是一个指向整型的指针ÿ…
📅 2026/7/31 4:01:48
本篇博客自底向上拆解C shared_ptr共享智能指针 核心底层原理。一、前置头文件配置#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
using namespace std;
#include<cstdlib>
#include<assert.h>
#include<atomic>知识点解析:atomic 头…
📅 2026/7/31 4:01:48
真的服了,昨天有个刚入行的小兄弟跑来问我,说老板让他做个边坡稳定的汇报PPT,他搞了一晚上,全是密密麻麻的公式和截图,老板看都没看直接打回来了。我就想问问,你们做工程的,是不是都忘了咱们是来解决问题的,不是来秀数学题的?我干了五年岩土,经手过几十个边坡项目,今…
📅 2026/7/31 4:01:20
数据库复制是把主库数据同步到备库的机制,分为逻辑复制和物理复制两种。逻辑复制传输的是 SQL 语句或行变更事件,物理复制传输的是存储引擎底层的物理日志。阿里云 PolarDB(云原生数据库)采用物理复制,在同步延迟、数据…
📅 2026/7/31 0:00:23
BilibiliDown:3分钟学会B站视频下载的终极指南 【免费下载链接】BilibiliDown (GUI-多平台支持) B站 哔哩哔哩 视频下载器。支持稍后再看、收藏夹、UP主视频批量下载|Bilibili Video Downloader 😳 项目地址: https://gitcode.com/gh_mirrors/bi/Bilib…
📅 2026/7/31 0:00:23
当前,游戏行业的“DataAI融合”已从概念验证进入价值落地阶段。根据IDC 2025年数据,中国AI游戏云市场规模已达18.6亿元;同时,游戏研发环节AI渗透率高达86%,生成式AI内容普及率超过50%。面对庞大的市场,游戏…
📅 2026/7/31 0:00:23
更多请点击:
https://codechina.net
第一章:AI帮助理解数学概念 人工智能正以前所未有的方式重塑数学学习的路径。通过自然语言处理与符号计算的深度融合,AI不仅能解析抽象定义,还能将定理、证明和几何直觉转化为可交互、可验证的…
📅 2026/7/31 1:18:08
1. 项目背景与核心价值去年参与的一个短剧项目让我深刻体会到传统创作流程的痛点:编剧团队花了三周打磨剧本,角色设计反复修改了七版,最后成片时又因为演员档期问题不得不临时调整分镜。这种低效的创作模式在快节奏的内容行业越来越难以为继。…
📅 2026/7/31 1:18:08
remix-i18next TypeScript类型安全实践:确保翻译键与类型定义同步 【免费下载链接】remix-i18next The easiest way to translate your React Router framework mode apps 项目地址: https://gitcode.com/gh_mirrors/re/remix-i18next
在开发多语言应用时&am…
📅 2026/7/31 1:18:08
目录
第一步:选对模板,省心一半
第二步:打开扫码点餐功能
开启功能按钮
桌台管理与桌码生成
第三步:个性化设计,打造品牌感
调整点餐页面
设置点餐规则 你还在让顾客站着排队点餐吗?2025年ÿ…
📅 2026/7/30 7:16:27
在业务中快速构建一个能理解私有文档、准确回答专业问题的智能助手,是很多开发团队面临的共同挑战。传统方案往往需要从零开始搭建复杂的 RAG(检索增强生成)系统,涉及文档解析、向量化、检索、大模型调用等多个环节,整…
📅 2026/7/30 17:17:14
FAE放射组学分析工具:医学影像特征探索的完整解决方案 【免费下载链接】FAE FeAture Explorer 项目地址: https://gitcode.com/gh_mirrors/fae/FAE
你是否曾经面对海量医学影像数据感到无从下手?想要从CT、MRI等影像中提取有价值的定量特征&#…
📅 2026/7/30 5:16:22