二叉树不保证平衡,红黑树通过五条颜色规则和旋转操作维持近似平衡;普通二叉树无自平衡机制,退化为链表时时间复杂度达o(n);红黑树靠变色与旋转修复插入删除引发的违规,确保树高o(log n)。

二叉树本身不保证平衡,只有特定类型才具备平衡能力;红黑树则通过颜色规则与旋转操作主动维持近似平衡。
普通二叉树不自动平衡
标准二叉树仅规定每个节点最多两个子节点,对左右子树高度差没有任何限制。插入有序数据(如 1、2、3、4)时,会退化为链表,查找、插入、删除退化到 O(n) 时间复杂度。它不具备任何自平衡机制,平衡与否完全依赖输入顺序和人工干预。
红黑树用五条性质约束结构
红黑树是自平衡的二叉搜索树,靠以下五条强制规则维持“弱平衡”:
- 每个节点非红即黑
- 根节点必须为黑色
- 所有叶子节点(NIL 或 null)均为黑色
- 红色节点的两个子节点必须都是黑色(即不能出现连续红节点)
- 任意节点到其所有叶子节点的每条路径上,黑色节点数量相同(称为“黑高”守恒)
这些规则共同确保:最长路径(红黑交替)不超过最短路径(全黑)的两倍,从而把树高控制在 O(log n) 范围内。
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
插入和删除时靠变色+旋转修复违规
新节点默认染红,可能违反规则(如父节点也为红)。此时按情况处理:
- 若存在红色叔节点 → 父、叔变黑,祖父变红(向上递推检查)
- 若无叔节点且父子异侧(如父在左、新节点在右)→ 先以父为轴单旋,转为同侧
- 若无叔节点且父子同侧 → 以祖父为轴旋转(左子树右旋 / 右子树左旋),再调整颜色
删除更复杂,可能引入“双黑”问题,需结合兄弟节点颜色、子节点情况,组合使用变色、旋转、借位或合并等策略,最终恢复全部五条性质。
与 AVL 树对比:平衡强度与开销取舍
AVL 树要求任意节点左右子树高度差 ≤ 1,平衡更强,但每次插入/删除平均触发更多旋转;红黑树允许更大高度差,旋转次数更少,更适合频繁增删场景(如 Java 的 TreeMap、HashMap 链表转红黑树阈值后)。两者都保证 O(log n) 查找,但红黑树在写多读少时整体性能更优。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










