美文网首页安卓考点脉络
【集合框架】红黑树

【集合框架】红黑树

作者: 小呀么小黄鸡 | 来源:发表于2018-02-24 09:46 被阅读2次

    红黑树与TreeMap

    基本性质

    1. 每个节点都只能是红色或者黑色
    2. 根节点是黑色
    3. 每个叶节点(NIL节点,空节点)是黑色的。
    4. 如果一个结点是红的,则它两个子节点都是黑的。也就是说在一条路径上不能出现相邻的两个红色结点。
    5. 从任一节点到其每个叶子的所有路径都包含相同数目的黑色节点。

    关键性质

    从根到叶子的最长的可能路径不多于最短的可能路径的两倍长。结果是这棵树大致上是平衡(左右子树的深度差不多)的。因为操作比如插入、删除和查找某个值的最坏情况时间都要求与树的高度成比例,这个在高度上的理论上限允许红黑树在最坏情况下都是高效的,而不同于普通的二叉查找树。所以红黑树它是复杂而高效的,其检索效率O(log n)。

    三大基本操作:左旋、右旋、着色。

    几个重要的属性:

            //比较器,因为TreeMap是有序的,通过comparator接口我们可以对TreeMap的内部排序进行精密的控制
            private final Comparator<? super K> comparator;
            //TreeMap红-黑节点,为TreeMap的内部类
            private transient Entry<K,V> root = null;
            //容器大小
            private transient int size = 0;
            //TreeMap修改次数
            private transient int modCount = 0;
            //红黑树的节点颜色--红色
            private static final boolean RED = false;
            //红黑树的节点颜色--黑色
            private static final boolean BLACK = true;
    

    对于叶子节点Entry是TreeMap的内部类,它有几个重要的属性:

            //键
            K key;
            //值
            V value;
            //左孩子
            Entry<K,V> left = null;
            //右孩子
            Entry<K,V> right = null;
            //父亲
            Entry<K,V> parent;
            //颜色
            boolean color = BLACK;
    

    增加节点的算法

    红黑树在新增节点过程中比较复杂,复杂归复杂它同样必须要依据上面提到的五点规范,同时由于规则1、2、3基本都会满足,下面我们主要讨论规则4、5。假设我们这里有一棵最简单的树,我们规定新增的节点为N、它的父节点为P、P的兄弟节点为U、P的父节点为G。

    红黑树增加节点
    对于新节点的插入有如下三个关键地方:
    1、插入新节点总是红色节点 。
    2、如果插入节点的父节点是黑色, 能维持性质 。
    3、如果插入节点的父节点是红色, 破坏了性质. 故插入算法就是通过重新着色旋转, 来维持性质 。

    新增的五种情况:
    一、为根节点
    二、父节点为黑色
    三、若父节点P和P的兄弟节点U都为红色
    四、若父节点P为红色,叔父节点U为黑色或者缺少,且新增节点N为P节点的右孩子
    五、父节点P为红色,叔父节点U为黑色或者缺少,新增节点N为父节点P左孩子

    put()

    主要分为两个步骤,第一:构建排序二叉树,第二:平衡二叉树
    对于排序二叉树的创建,其添加节点的过程如下:
    1、以根节点为初始节点进行检索。
    2、与当前节点进行比对,若新增节点值较大,则以当前节点的右子节点作为新的当前节点。否则以当前节点的左子节点作为新的当前节点。
    3、循环递归2步骤知道检索出合适的叶子节点为止。
    4、将新增节点与3步骤中找到的节点进行比对,如果新增节点较大,则添加为右子节点;否则添加为左子节点。

    delete()

    相关文章

      网友评论

        本文标题:【集合框架】红黑树

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