美文网首页
01.浅谈红黑树

01.浅谈红黑树

作者: 过往入梦 | 来源:发表于2017-11-07 01:50 被阅读0次

二叉查找树(Binary Search Tree)

  • 特性:
    1 左子树上所有结点的值均小于或等于它的根结点的值。
    2 右子树上所有结点的值均大于或等于它的根结点的值。
    3 左、右子树也分别为二叉排序树。


    二叉查找树

优点:
查找所需的最大次数等同于二叉查找树的高度!
缺点:
多次插入新节点会导致不平衡!

失去平衡

红黑树(Red Black Tree)

  • 自平衡的二叉查找树。


    红黑树
  • 附加特性:
    1 节点是红色或黑色。
    2 根节点是黑色。
    3 每个叶子节点都是黑色的空节点(NIL节点)。
    4 每个红色节点的两个子节点都是黑色(从每个叶子到根的所有路径上不能有两个连续的红色节点)。
    5 从任一节点到其每个叶子的所有路径都包含相同数目的黑色节点。

  • 红黑树从根到叶子的最长路径不会超过最短路径的两倍。

  • 当插入或者删除节点的时候,红黑树的规则有可能被打破,需要做一些调整(【变色】和【旋转】(左旋和右旋))。

    • 【变色】:红色节点变为黑色,或者把黑色节点变为红色。
    • 【左旋转】:逆时针旋转红黑树的两个节点,使得父节点被自己的右孩子取代,而自己成为自己的左孩子。


      左旋转
    • 【右旋转】:顺时针旋转红黑树的两个节点,使得父节点被自己的左孩子取代,而自己成为自己的右孩子。


      右旋转

demo1:向原红黑树插入值为14的新节点

向原红黑树插入值为14的新节点
  • 由于父节点15是黑色节点,因此这种情况并不会破坏红黑树的规则,无需做任何调整。

demo2:向原红黑树插入值为21的新节点

step1
  • 变色


    step2
    step3
    step4
  • 此时的样子


    step5
  • 左旋转


    step5
  • 变色


    step6
  • 其中两条路径(17 -> 8 -> 6 -> NIL)的黑色节点个数是4,其他路径的黑色节点个数是3,不符合规则5。
  • 右旋转


    step6
  • 变色


    step7
  • 结束!

红黑树的应用场景:

  • JDK的集合类TreeMap和TreeSet底层用的红黑树。Java8中,HashMap也用到了红黑树。

  • 针对大量数据,如果在内存中作业优先考虑红黑树(map,set之类多为RB-tree实现),如果在硬盘中作业优先考虑B系列树(B+, B, B*)。

参考:

相关文章

  • 01.浅谈红黑树

    二叉查找树(Binary Search Tree) 特性:1 左子树上所有结点的值均小于或等于它的根结点的值。2 ...

  • Boolan(博览网)——STL与泛型编程(第八周)

    目录 深度探索 deque 浅谈 queue & stack 浅谈 RB-tree(红黑树) 浅谈 set/mul...

  • (313)红黑树-java实现

    引言 根据《算法》第4版。编写红黑树。 理论 参见: 浅谈算法和数据结构: 八 平衡查找树之2-3树 浅谈算法和数...

  • 浅谈红黑树

    红黑树(Red Black Tree) 是一种自平衡的二叉查找树.除了符合二叉查找树的基本特性,它还有以下的特性:...

  • 浅谈红黑树

    二叉树排序 二叉树排序主要包括,节点信息的设计、节点的插入和树的中序遍历 节点信息(包括左右孩子和节点value)...

  • 数据结构—树—红黑树

    红黑树概述 红黑树的插入 红黑树的删除

  • TreeMap

    需要先了解红黑树,这是之前分析红黑树的文章。之前在分析红黑树时,我认为红黑树=二叉查找树+红黑平衡,关于二叉查找树...

  • 数据结构与算法-AVL 红黑树

    AVL树AVL树 算法红黑树红黑树 B站

  • [转载]红黑树

    https://zhuanlan.zhihu.com/p/24367771红黑树简介红黑树插入红黑树删除

  • 拿下红黑树

    红黑树 红黑树、2-3树的简单定义: 实现红黑树的基本结构以及添加操作(维护定义,左旋、右旋、颜色反转) 红黑树与...

网友评论

      本文标题:01.浅谈红黑树

      本文链接:https://www.haomeiwen.com/subject/phtdmxtx.html