zoukankan      html  css  js  c++  java
  • DataStructuresAndAlogorithm--红黑树

    简介

    为了理解红黑树(red-black tree)是什么,首先需要知道二叉树。

     定义1:二叉树是结点的有限集合,该集合或者为空集,或者是由一个根和两棵互不相交的,称为该根的左子树和右子树的二叉树组成。 

    但是为了解决实际问题,往往需要对数据作一定的排序,这样才能更快速的找到所要的数据。基于此,我们需要了解下二叉搜索树(Binary Search Tree, BST)。

    定义2:设结点由关键字值表征,假定所有结点的关键字值各不相同,二叉搜索树或者谁一棵空二叉树,或者是具有下列性质的二叉树:
        1)若左子树不空,则左子树上所有结点的关键字值均小于根结点的关键字值
        2)若右子树不空,则右子树上所有结点的关键字值均大于根结点的关键字值
        3)左,右子树也分别是二叉搜索树

    然而,某些极端情况下,二叉搜索树可能会变成只有左子树或只有右子树等这些极端情况,相当于树退化成了一个链表,为了防止这种退化,我们需要了解些二叉平衡树。

    定义3:二叉平衡树又成AVL树(G.M.Adel'son-Vel'skii和E.M.Landis),它或者是一棵空二叉树,或者是具有下列性质的二叉树:
        1)其根的左,右子树高度之差的绝对值不超过1
        2)其根的左,右子树都是二叉平衡树

    然而,这还不是非常完美,因为二叉平衡树的性质1导致了其为了维护其平衡性,需要作过多的旋转调整操作,基于此,红黑树这个弱化的二叉平衡树横空出世。

    红黑树在每个结点上增加了一个存储位来表示结点的颜色,可以是RED或BLACK。通过对任何一条根到叶子的简单路径上各个结点的颜色进行约束,红黑树确保没有一条路径会比其他路径长出2倍,因为是近似平衡的。红黑树可以保证在最坏情况下基本动态集合操作的时间复杂度为O(logn)。

    一棵红黑树是满足下面红黑性质的二叉搜索树:

    1)每个结点的或是红色的,或是黑色的
    2)根结点是黑色的
    3)每个叶结点(NIL)是黑色的
    4)如果一个结点是红色的,则它的两个子结点都是黑色的
    5)对每个结点,从该结点到其所有后代叶结点的简单路径上,均包含相同数目的黑色结点
  • 相关阅读:
    ES6 语法
    使用过滤器进行跨域
    java读取资源文件(Properties)
    跨域
    java提取(获取)博客信息(内容)
    SSM命名规范框架
    学校管理系统设计java(数据库、源码、演讲内容、ppt等)
    学校管理系统C#(数据库、源码、演讲内容、ppt等)
    vue快速使用
    故障排除:无法启动、访问或连接到 Azure 虚拟机上运行的应用程序
  • 原文地址:https://www.cnblogs.com/microcat/p/10810424.html
Copyright © 2011-2022 走看看