[置顶] 图解红黑树之2-3查找树

树结构

树结构有下面的几个缺点

  • 空间:占空间较多相对于线性结构
  • 创建:构造起来比较麻烦
  • 维护:对于平衡树,结构修改(增、删)后又需要平衡

那么,既然这样为什么还要用树结构呢。原因很简单,它的插入和删除操作所使用的时间非常短。红黑树可以在O(log n)的时间内做查找、插入和删除操作

2-3查找树

直接接受“红黑树”还是有些难以下咽的,红黑树跟2-3查找树有着千丝万缕的联系,因此这里从简单轻松的2-3查找树开始介绍。
2-3查找树也是一种平衡排序树,2代表一个节点最多有两个值,3代表各节点最多有3个子节点。

[置顶] 图解红黑树之2-3查找树_第1张图片

当插入的时候,被插入的位置节点数为1,直接插入;被插入的节点数为2,直接插入变成3节点,这种情况况叫做溢出,选择溢出节点的中位数,上浮到父节点中,父节点如果也溢出,继续溢出处理;当root节点溢出的时候,把中位数构造成新的root,另外两个节点变成它的子节点,这时Tree.height加1,这也是Tree.height唯一变化的方式。

[置顶] 图解红黑树之2-3查找树_第2张图片

新插入的节点为N

因为2-3查找树不是介绍的重点,因此就暂时介绍到这里。

2-3查找树是B树的一种情况,B树的具体内容,请参看《算法导论》

红黑树

红黑树也是平衡二叉树的一种,把2-3查找树中的2-节点分割为两个节点,节点之间用红树干链接,这样就组成了红黑树。

[置顶] 图解红黑树之2-3查找树_第3张图片

五个原则:

  1. 节点是红色或黑色。

  2. 根是黑色。

  3. 所有叶子都是黑色(叶子是NIL节点)。

  4. 每个红色节点必须有两个黑色的子节点。(不能有两个连续的红色节点。)

  5. 从任一节点到其每个叶子的所有简单路径都包含相同数目的黑色节点。

五个原则简单而优雅,这是“大咖”们历经千辛万苦凝结成的精华,需要认真的思考才能知道其中的缘由。因此不妨停在这里,深深的思考一下,因为有些东西别人是教不会的,需要自己领悟。

“双红”冲突

插入的时候,新插入的节点为N和父节点均为红色,这叫做“红红”冲突(违反了原则4)。倘若允许它的存在,那么这棵树就可以全是红树,就没有平衡可言了。

“双黑”冲突

删除的时候,删除的节点N本身为黑色,那么删除以后,这个分支的黑色节点总数目会变小,倘若N的子节点可以当做两个黑节点看待,换句话说:删除了N以后,它的两个子节点就要“黑色担当”,只有这样这棵树才是平衡的。这样的子节点就是“双黑”节点。消除了这种“双黑”冲突,删除才算完成。

这篇就到这里,请看下一篇:《图解红黑树之插入与删除》

你可能感兴趣的:(红黑树)