zoukankan      html  css  js  c++  java
  • 【数据结构学习笔记】_红黑树之节点插入(三)

    来,继续,看红黑色的插入~

    目录

    第一点  你的名字

    第二点  开始插入

    第一点  你的名字

    再次介绍下约定的出场演员名单:

              N:需要插入的节点

              P:N需要插入的位置的爸爸(父节点)

              U:N需要插入的位置的叔叔节点(P的姐妹节点)

              G:N需要插入的位置的爷爷(祖父节点)

    N:还记得【数据结构学习笔记】_红黑树之基础知识(一)里面提到的“搜索二叉树的插入”吗?:

              1、如果是空树,则作为根节点;

              2、不是空树则从根节点搜索,

                    1)值小于当前节点,该节点有左孩子,一直找下去,直到没有左孩子,插入的节点作为左孩子;

                    2)值大于当前节点,该节点有右孩子,一直找下去,直到没有右孩子,插入的节点作为右孩子;

    红黑树也遵循这个规则,然后做一些着色和旋转处理:

    第二点  开始插入

     按上面分析的4大类(N的颜色+P的颜色+U的颜色)7种场景(Case7)来具体分析,插入节点后需要做的操作:


     Case1 ~~~情形:N(0010)就是根节点

              ~~~策略为:直接插入N,然后将N的颜色(新插入的节点都是红色)由红色变成黑色

      


     Case2 ~~~情形:N不是根节点,它需要插入位置的P是黑色

              ~~~策略为:直接插入N

     


     Case3 ~~~情形:N不是根节点,它需要插入位置的P是红色、叔叔U也是红色

              ~~~策略为:将P和U变成黑色,将G变成红色,作为新插入的节点一样的再次判断


     Case4 ~~~情形:1、N不是根节点,它需要插入位置的P是红色、叔叔U是黑色或者空节点

                               2、N和P和G在一条直线上、N是P的左孩子

              ~~~策略为:右旋G


     Case5 ~~~情形:1、N不是根节点,它需要插入位置的P是红色、叔叔U是黑色或者空节点

                               2、N和P和G在一条直线上、N是P的右孩子

              ~~~策略为:左旋G


     Case6 ~~~情形:1、N不是根节点,它需要插入位置的P是红色、叔叔U是黑色或者空节点

                               2、N和P和G不在一条直线上、N是P的左孩子

              ~~~策略为:N首先变成P的父节点,原来的P成为N的右孩子,然后再左旋新的P


     Case7 ~~~情形:1、N不是根节点,它需要插入位置的P是红色、叔叔U是黑色或者空节点

                               2、N和P和G不在一条直线上、N是P的右孩子

              ~~~策略为:N首先变成P的父节点,原来的P成为N的左孩子,然后再左旋新的P

     

  • 相关阅读:
    点击两次返回键程序退出
    权限android.permission.WRITE_EXTERNAL_STORAGE 内外置sd卡写权限
    java Calendar add方法
    MeasureSpec简介
    android bitmap转换
    IOS键盘隐藏和显示调用
    内存溢出
    UIView递归
    caLayer
    C++算法
  • 原文地址:https://www.cnblogs.com/zmhsoup/p/8066458.html
Copyright © 2011-2022 走看看