zoukankan      html  css  js  c++  java
  • Linux内核源码之红黑树

    概述                                                                                        

    在阅读红黑树新增节点的源码时,思考了这样一个问题:inser一个节点之后,什么情况下需要旋转红黑树,什么情况下又不需要旋转红黑树呢?

    引用:http://www.cnblogs.com/skywang12345/p/3245399.html

    根据被插入节点的父节点的情况,可以将"当节点z被着色为红色节点,并插入二叉树"划分为三种情况来处理。
    ① 情况说明:被插入的节点是根节点。
        处理方法:直接把此节点涂为黑色。
    ② 情况说明:被插入的节点的父节点是黑色。
        处理方法:什么也不需要做。节点被插入后,仍然是红黑树。
    ③ 情况说明:被插入的节点的父节点是红色。
        处理方法:那么,该情况与红黑树的“特性(5)”相冲突。这种情况下,被插入节点是一定存在非空祖父节点的;进一步的讲,被插入节点也一定存在叔叔节点(即使叔叔节点为空,我们也视之为存在,空节点本身就是黑色节点)。理解这点之后,我们依据"叔叔节点的情况",将这种情况进一步划分为3种情况(Case)。

      现象说明 处理策略
    Case 1

    当前节点的父节点是红色,且当前节点的祖父节点的另一个子节点(叔叔节点)也是红色。

    可以看出,叔叔节点是红色时,暂时不需要旋转,需要刷新颜色之后再看

    (01) 将“父节点”设为黑色。
    (02) 将“叔叔节点”设为黑色。
    (03) 将“祖父节点”设为“红色”。
    (04) 将“祖父节点”设为“当前节点”(红色节点);即,之后继续对“当前节点”进行操作。

    Case 2 当前节点的父节点是红色,叔叔节点是黑色,且当前节点是其父节点的右孩子

    (01) 将“父节点”作为“新的当前节点”。
    (02) 以“新的当前节点”为支点进行左旋。

    Case 3 当前节点的父节点是红色,叔叔节点是黑色,且当前节点是其父节点的左孩子

    (01) 将“父节点”设为“黑色”。
    (02) 将“祖父节点”设为“红色”。
    (03) 以“祖父节点”为支点进行右旋。

    上面三种情况(Case)处理问题的核心思路都是:将红色的节点移到根节点;然后,将根节点设为黑色。下面对它们详细进行介绍。

     

    二叉搜索树                                                                               

    给红黑树新增节点的第一步操作,就是按照二叉搜索树的性质,将节点插入树结构中。

    先回顾一下二叉搜索树的概念。

    二叉查找树(Binary Search Tree、二叉搜索树,二叉排序树):它或者是一棵空树,或者是具有下列性质的二叉树

    若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值;

    若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值;

    它的左、右子树也分别为二叉排序树

    平衡二叉树                                                                               

    平衡二叉树(Balanced Binary Tree)又被称为AVL树(有别于AVL算法)。

    且具有以下性质:它是一 棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。

  • 相关阅读:
    基于OpenVINO的端到端DL网络-GOMfcTemplate在vs2017上的运行并融合Dnn模块
    Windows环境下最新OpenCV和Contribute代码的联合编译【20190505更新红字】
    图像处理程序的序列化和反序列化
    OpenCv dnn模块扩展研究(1)--style transfer
    OpenCV自带dnn的Example研究(5)— segmentation
    OpenCV自带dnn的Example研究(6)— text_detection
    OpenCV自带dnn的Example研究(3)— object_detection
    OpenCV自带dnn的Example研究(4)— openpose
    OpenCV自带dnn的Example研究(1)— classification
    OpenCV自带dnn的Example研究(2)— colorization
  • 原文地址:https://www.cnblogs.com/wangxiaokun/p/6937959.html
Copyright © 2011-2022 走看看