Loading

红黑树

date: 2020-09-09 17:36:00
updated: 2020-09-09 17:54:00

红黑树

1. 红黑树

数组查询快,链表插入删除快 => 二叉树兼具两者优点 => 但是二叉树可能存在特殊情况,即一侧子树非常长,另一侧很短,不平衡 => 红黑树,即二叉平衡树,是一个去除二叉树顶端优势的解决方案,从而达到树的平衡。

红黑树,Red-Black Tree 「RBT」是一个自平衡(不是绝对的平衡)的二叉查找树(BST),树上的每个节点都遵循下面的规则:

  1. 每个节点都有红色或黑色
  2. 树的根始终是黑色的
  3. 没有两个相邻的红色节点(红色节点不能有红色父节点或红色子节点,并没有说不能出现连续的黑色节点)
  4. 从节点(包括根)到其任何后代NULL节点(叶子结点下方挂的两个空节点,并且认为他们是黑色的)的每条路径都具有相同数量的黑色节点

红黑树两大操作:

  1. recolor (重新标记黑色或红色)
  2. rotation (旋转,这是树达到平衡的关键)

红黑树插入节点过程:

  1. 新插入的节点标记为红色
  2. 如果 X 是根结点(root),则标记为黑色
  3. 如果 X 的 parent 不是黑色,同时 X 也不是 root:
    3.1 如果 X 的 uncle (叔叔) 是红色
    3.1.1 将 parent 和 uncle 标记为黑色
    3.1.2 将 grand parent (祖父) 标记为红色
    3.1.3 让 X 节点的颜色与 X 祖父的颜色相同,然后重复步骤 2、3
posted @ 2020-10-22 11:20  猫熊小才天  阅读(127)  评论(0编辑  收藏  举报