TreeNode显式存储parent、left、right指针并主动维护,red字段标识颜色,插入默认红色,根节点强制变黑;树化时自动构建双向链表与红黑树结构;旋转操作同步更新父子引用与颜色以保持红黑性质。

TreeNode 的父子指针是显式存储的
TreeNode 类直接声明了 parent、left、right 三个引用字段,不依赖父类继承。每个节点在构造或树化过程中,会主动设置这些指针:
- 插入新节点时,先找到插入位置,再将新节点的
parent指向其父节点 -
left和right分别指向左、右子节点;若某侧无子节点,则为null - 删除或旋转操作中,会同步更新涉及节点的
parent字段(比如左旋后,原根节点变成左子节点的右孩子,其parent需重设)
颜色通过布尔字段 red 管理
TreeNode 中的 red 字段表示该节点是否为红色。红黑树所有规则都围绕这个值展开:
- 新插入节点默认设为
red = true(这是修复平衡的起点) - 插入后若违反规则(如出现连续两个红色),通过变色(
red = !red)和旋转来恢复 - 根节点强制变黑:最终调用
root().red = false
树化过程自动建立完整关系
从链表转红黑树时,treeify() 方法逐个遍历链表节点,创建 TreeNode 并构建结构:
诊断并恢复通过 SSH 隧道连接的 OpenClaw 节点。用于解决配对必需错误、隧道冲突、远程端点错误以及 SSH 目标配置错误等问题。
- 先用
replacementTreeNode()把每个 Node 包装成 TreeNode,保留 hash/key/value/next - 再通过循环连接
prev和next,形成双向链表结构(便于后续遍历) - 最后调用
hd.treeify(tab),内部按 hash 或 key 比较顺序建树,并在建树过程中实时设置parent、left、right和red
旋转操作同步更新父子与颜色
左旋、右旋不是单纯交换指针,而是重构局部子树结构,并保持红黑性质:
立即学习“Java免费学习笔记(深入)”;
- 以右旋为例:设节点
p有左孩子x,右旋后x成为新父节点,p变为其右孩子;此时要重连p.parent、x.parent、p.left、x.right等多个引用 - 旋转后通常伴随变色(如将原
p设为红色、x设为黑色),确保路径黑高不变 - 这些逻辑全部封装在 TreeNode 内部方法中(如
rotateRight()),调用方无需手动维护细节

















