• 能够自平衡的【红黑树】,必知必会


    红黑树

    红黑树(英语:Red–black tree)是一种自平衡二叉查找树,是在计算机科学中用到的一种数据结构,典型的用途是实现关联数组。它是在1972年由鲁道夫·贝尔发明的,他称之为”对称二叉B树”,它现代的名字是在Leo J. Guibas和Robert Sedgewick于1978年写的一篇论文中获得的。它是复杂的,但它的操作有着良好的最坏情况运行时间,并且在实践中是高效的:它可以在 O(logn)时间内做查找,插入和删除,这里的n是树中元素的数目,摘自:维基百科-红黑树。



    特点(需要满足的规则)

    1. 每个节点非红即黑;
    2. 根节点总是黑色的;
    3. 每个叶子节点都是黑色的空节点(NIL节点);
    4. 如果节点是红色的,则它的子节点必须是黑色的(反之不一定);
    5. 从根节点到叶节点或空子节点的每条路径,必须包含相同数目的黑色节点(即相同的黑色高度)

    例如:

    在我看来:

    1. 除开NIL结点,看图的颜色,不难发现从root开始黑红交替;
    2. 只有在叶子结点和NIL结点可能出现两个黑色结点,除开这种,没有连续的红(黑)结点连续。

    红黑树的修正

    详细了解

    1. 变色

    变色仅仅指的是红黑树节点的变色。因为红黑树节点必须是【红】或者【黑】这两中颜色,所以变色只是将当前的节点颜色进行变化,以满足特性(2,3,4,5)。

    2. 旋转

    旋转分左旋和右旋。图片一看就懂。

    1. 左旋

    2. 右旋



    应用

    TreeMap、TreeSet以及JDK1.8之后的HashMap底层都用到了红黑树。


    推荐阅读

    1. 漫画:什么是红黑树?(墙裂推荐,也讲到了平衡二叉树)
    2. 红黑树深入剖析及Java实现(美团点评技术部门)


    谢谢阅读!

  • 相关阅读:
    开博语
    ch8 固定宽度、流式、弹性布局
    ch8 让div居中--使用外边距
    ch8 基于浮动的布局(两列浮动布局、三列浮动布局)
    ch3 盒模型、定位
    事件类型--鼠标与滚轮事件
    事件类型-UI事件、焦点事件
    事件对象
    事件处理程序
    内存和性能--事件委托、移除事件处理程序
  • 原文地址:https://www.cnblogs.com/yanshanbei/p/11610410.html
Copyright © 2020-2023  润新知