zoukankan      html  css  js  c++  java
  • 数据结构之红黑树

    红黑树简介:

    所谓红黑树,就是平衡的扩充二叉搜索树,红黑树与AVL都是BST的平衡版本,相比AVL的完全平衡,红黑树只要求局部平衡,因此当向红黑树中插入和删除节点时,需要的调整比AVL要少,统计性能要好于AVL树,C++ STL中的map、set、multimap和multiset都应用了红黑树的变体。

    红黑树是特殊的二叉查找树,意味着它满足二叉查找树的特征:任意一个节点所包含的键值,大于等于左孩子的键值,小于等于右孩子的键值

    当数据以升序或降序插入时,二叉搜索树的性能就会下降到最低,但是红-黑树的自我修复功能保证了即使在最坏的情况下,也能保证时间复杂度在O(logN)的级别上。

    红黑树是满足下面红黑性质的二叉搜索树:
    1. 每个节点,不是红色就是黑色的;
    2. 根节点是黑色的;
    3. 如果一个节点是红色的,则它的两个子节点是黑色的;
    4. 对每个节点,从该节点到其所有后代叶节点的简单路径上,均包含相同数目的黑色节点;
    5. 每个叶子节点都是黑色的(这里的叶子节点是指的空节点)

    红黑树的特点:

           1.每个节点不是红色就是黑色的;

            2.根节点总是黑色的;

            3.如果节点是红色的,则它的子节点必须是黑色的(反之不一定);

            4.从根节点到叶节点或空子节点的每条路径,必须包含相同数目的黑色节点(即相同的黑色高度)。  

     在红-黑树中插入的节点都是红色的,这不是偶然的,因为插入一个红色节点比插入一个黑色节点违背红-黑规则的可能性更小。原因是:插入黑色节点总会改变黑色高度(违背规则4),但是插入红色节点只有一半的机会会违背规则3。另外违背规则3比违背规则4要更容易修正。  

    红黑树的修正:改变节点颜色、左旋和右旋。

    变色:

    左旋:

    右旋:

         

     

    参考文章:

    https://blog.csdn.net/eson_15/article/details/51144079

  • 相关阅读:
    TCP
    关系型数据库基础
    spark教程(16)-Streaming 之 DStream 详解
    spark教程(15)-Streaming
    灰度图Matlab
    mesh函数
    axis函数
    Matlab提供了两种除法运算:左除()和右除(/)
    基和时间平移矩阵
    转载:实现MATLAB2016a和M文件关联
  • 原文地址:https://www.cnblogs.com/xiaoxue126/p/9008032.html
Copyright © 2011-2022 走看看