美文网首页
数据结构红黑树添加、修改原理分析

数据结构红黑树添加、修改原理分析

作者: 隔壁小新 | 来源:发表于2022-10-20 17:54 被阅读0次

源码分析大纲

  • 数据结构解析
  • 红黑树试下原理刨析

数据结构解析

1.红黑树
红黑树图形
1.1 红黑树概念

红黑树(Red Black Tree) 是一种自平衡二叉查找树,
红黑树和AVL树类似,都是在进行插入和删除操作时通过特定操作保持二叉查找树的平衡,从而获得较高的查找性能。它虽然是复杂的,但它的最坏情况运行时间也是非常良好的,并且在实践中是高效的: 它可以在O(log n)时间内做查找,插入和删除,这里的n 是树中元素的数目。它与AVL树之间的区别:AVL树必须通过多次旋转后达到平衡,而红黑树可以通过旋转或者变色从而保持平衡。

1.2 红黑树的特性

1. 节点为黑色或红色
2. 根节点为黑色
3. 每个叶子节点都是黑色的空节点(NIL) [注意:这里叶子节点,是指为空(NIL或NULL)的叶子节点!]
4. 每个红色节点的两个孩子节点都是黑色(保证从每个叶子到根的所有路径上不能有两个连续的红色节点
5. 从任一节点到其每个叶子的所有路径都包含相同数目的黑色节点(保证了红黑树从根到叶子的最长路径不会超过最短路径的两倍)

红黑树图片
红黑树模拟生成地址
1.3 红黑树保持平衡方式(旋转、变色)

左旋转


左旋图

以1为节点进行左旋,1往下3节点往上走,3节点的左节点变成1,3的原来左节点挂到1的右节点上,形成左旋。

右旋


右旋图

以3节点为中心进行右旋,3节点往下走,1节点提上,1节点的右节点变为3节点,1节点的原先右节点挂到3节点的右节点上,旋转完毕。

变色
安装红黑树五条规定进行操作。

1.4 红黑树的插入(当前节点默认为红色)
    1. 当前节点的插入点为根节点的时候,对插入节点进行变色处理。


      根节点
  • 2.当前节点插入点为黑色的情况直接插入。


    image.png
  • 3.当前节点的插入点为红色,并且它的兄弟节点也为红色的时候,插入点,和兄弟节点变为黑色,插入点的父节点变为红色,再以插入点的父节点作为当前节点,进行下一轮的判断。(I为当前节点,P为插入点,PP为父节点,S为叔叔节点)


    叔红情况判断
    1. 当前节点的插入点为红色,并且他的兄弟节点为黑色或者不存在,把插入点变黑色,插入点的父节点变为红色,如果当前点在插入的左子树,以插入点的父节点为中心,进行右旋转,如果当前点在插入点的右子树,以插入点的父节点为中心,进行左旋转。进而平衡。


      叔为黑或者为空情况
      叔为黑或者为空情况
1.5红黑树删除问题分析。
  • 1.如果删除的的为根节点。


    删除根节点
  • 2.如果删除节点为红节点,并且只有左节点,或者只有右节点,使用左节点,或者右节点代替当前删除节点。并且把左节点或者右节点变为黑色。直接删除节点。


    有一个子类
  • 3.如果删除节点为黑色,并且只有左节点,或者只有右节点,直接使用下面的节点代替删除点,不用进行变色操作。


    image.png
    1. 删除节点,既有左子树,又有右子树的情况,直接获取它的后继节点代替当前节点,变为删除后继节点方法。后继节点只有两种情况,没有节点,或者为只有右节点。


      删除节点两点情况
  • 4.1 当只有右节点的时候规则转换为2和3的规则。

  • 4.2 当没有节点的时候,如果节点为红色,直接进行删除。


    没有节点的情况
  • 4.3 当没有左节点且没有右节点的情况,并且颜色为黑色,如果他的兄弟节点为黑色。

  • 4.3.1 如果兄弟节点没有左子树,并且没有右子树,把兄弟节点变为红色,如果父节点为红色,把父亲节点变为黑色,循环平衡结束, 如果父亲节点为黑色,删除当前子树节点后,当前节点会少一个黑节点,再以当前父类节点作为当前节点进行下一次循环判断,直到平衡(注意:通过画图的,下一次循环不会再进入4.3.1而会进入4.3.2或者为root节点。从而实现平衡)(treemap删除循环逻辑)**

    第一种情况
    第二种循环的情况
  • 4.3.1 如果兄弟节点为黑色,有右子树,把右子树设置为黑色,兄弟节点的颜色与父节点交换,把父节点设置为黑色,以兄弟节点进行左旋,这样,左边节点比右边节点多出一个黑节点,删除多余的那个节点,保持了红黑树平衡

    兄弟节点有值情况展示
    兄弟节点有值情况展示
  • 4.3.2 **如果兄弟节点为红色,把兄弟节点变为黑色,父节点变为红色,以兄弟节点进行左旋,得到4.3.1的情况,以4.3.1的情况继续进行操作。


    兄弟节点为红色情况

相关文章

网友评论

      本文标题:数据结构红黑树添加、修改原理分析

      本文链接:https://www.haomeiwen.com/subject/wwhmzrtx.html