数据结构-红黑树

2021-07-26  本文已影响0人  AAA前端

红黑树

红黑树(Red Black Tree) 是一种自平衡二叉查找树

红黑树是一种特化的AVL树(平衡二叉树),都是在进行插入和删除操作时通过特定操作保持二叉查找树的平衡,从而获得较高的查找性能

红黑树,除了符合二叉搜索树的基本规则外,还添加了以下特性(规则):

  1. 节点是红色或黑色
  2. 根节点是黑色
  3. 每个叶子节点都是黑色的空节点(null)
  4. 每个红色节点的两个子节点都是黑色(从每个叶子到根的所有路径上不能有两个连续的红色节点)
  5. 从任一节点到其每个叶子的所有路径都包含相同数目的黑色节点


    image.png

关键特性
从根到叶子的最长可能路径,不会超过最短可能路径的两倍长

换色
为了重新符合红黑树的规则,尝试把红色节点改为黑色节点,或者把黑色节点变为红色。
左旋转
逆时针旋转红黑树的两个节点,使得父节点被自己的右孩子取代,而自己成为自己的左孩子

右旋转
顺时针旋转红黑树的两个节点,使得父节点被自己的左孩子取代,而自己成为自己的右孩子

image.png

插入操作

假设插入的节点为N,其父节点为P, 其祖父节点为G, 其父节点的兄弟节点为U (P和U有相同的父节点G)

  1. 情况一:

方案:这种情况,直接将红色变化为黑色即可 (规则2)

  1. 情况二
  1. 情况三

可能出现的问题

  1. 情况四

方案:

  1. 情况五(如果新节点N不是左节点,父节点左旋转之后,可以得到情况3或情况4的结果,再变化即可

方案:

image.png

栗子: 依次插入10,9,8,7,6,5,4,3,2,1

黑色的空节点null 没有画出来

image.png image.png image.png image.png image.png image.png image.png image.png image.png image.png
上一篇下一篇

猜你喜欢

热点阅读