常见的查找算法(五):树表查找之二 ---- 红黑树
红黑树 是每个节点都带有 颜色 属性的 二叉查找树 ,颜色为 红色 或 黑色 。在二叉查找树强制一般要求以外,对于任何有效的红黑树我们增加了如下的额外要求: 节点是 红色 或 黑色 。 根 是 黑色 。 所有叶子 都是 黑色 (叶子是NIL节点)。 每个 红色节点 必须有两个 黑色 的 子节点 。(从每个 叶子 到 根 的所有路径上 不能有 两个 连续的 红色节点。) 从 任一节点 到 其每个叶子 的所有 简单路径 都包含 相同数目 的黑色节点。 下面是一个具体的红黑树的图例: 旋转 旋转 是一种能 保持二叉搜索树性质 的搜索树局部操作。其中两种旋转分别为 左旋 和 右旋 : 在某个结点 x 上进行 左旋 时,假设它的右孩子为y而不是树的 T.nil 结点;x为其右孩子而不是 T.nil 结点的树内任意节点。 左旋 以 x 到 y 的链为“支轴”进行,使得 y 成为该子树的 新的根节点 ,x 成为 y 的左孩子,y 的左孩子变成 x 的右孩子; 右旋 与此相反。 左旋代码: 1 /** 2 * 左旋 3 * 左旋示意图(对节点x进行左旋): 4 * px px 5 * / / 6 * x y 7 * / \ --(左旋)--> / \ 8 * lx y x ry 9 * / \ / \ 10 * ly ry lx ly 11 * 12 *