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

    1.基本概念:

     红黑树,一种二叉查找树,但在每个节点上增加一个存储位表示节点的颜色,红色或者黑色,通过对任何一条从根到叶子的路径上各个节点着色方式的限制,红黑树确保没有一条路径会比其他路径长处两倍,因而接近是平衡的。

    2.特性:

    (1)红黑树是一颗二叉查找树,执行查找,插入,删除等操作的时间复杂度为O(lgn)

    (2)如果一颗具有n个节点的线性链,那么二叉查找树的最坏情况时间O(n),而红黑树能保证在最坏情况下,基本的动态几何操作的时间均为O(lgn)。

    红黑树的特点:

     1).每个节点要么是红的,要么是黑的。

     2).根节点时黑的。

     3).每个叶子节点,即空节点(NIL)是黑的。

     4).如果一个节点时红的,那么它的两个儿子都是黑的。

     5).对每个节点,从该节点到其子孙节点的所有路径上包含相同数目的黑节点。

    3.树的旋转

    前景:当我们对红黑树进行插入和删除等操作时,对树做了修改,可能会违背红黑树的性质,为了保持红黑树的性质,我们可以通过对树进行旋转,即修改树种某些节点的颜色及指针结构,以达到红黑树进行插入,删除等操作,红黑树依然能保持它特有的性质。

    3.1 左旋:

      

    1).如果x的父节点是空节点,则将y设为根节点;

    2).如果x是它父节点的左孩子,则将y设为“x的父节点的左孩子”;

    3).如果x是它父节点的右孩子,将y设为“x的父节点的右孩子”;

    将x设为y的左孩子,

    将x的父节点设为y

    3.2右旋

      

    对Y进行右旋,意味着“将Y变成一个右节点”

    如果“y的父亲”是一个空节点,则将X设为根节点;

    如果y是它父节点的右孩子,则将x设为“y的父节点的右孩子”

    如果y是它父节点的左孩子,将x设为“y的父节点的左孩子”

    将y设为x的右孩子,

    将y的父节点设为x

    原文参考:http://www.cnblogs.com/v-July-v/archive/2010/12/29/1983707.html

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

  • 相关阅读:
    精通CSS高级Web解决方案(第2版)——读书笔记
    MySQL的知识点总结(一)
    json深拷贝
    Typescript 从Array 继承时碰到的问题
    webpack 笔记
    JavaScript 高效代码
    编写更优雅的 JavaScript 代码
    JavaScript复杂判断优雅写法
    深入浅出Javascript事件循环机制
    关于面向对象封装的思考--持续更新
  • 原文地址:https://www.cnblogs.com/Wanted-Tao/p/7647263.html
Copyright © 2011-2022 走看看