热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

详解红黑树和TreeMap的方法原理

参考算法导论本文篇幅可能较长需要读者慢慢理解,一步一步看。什么是红黑树?我们要了解红黑树就必须知道红黑树是什么?红黑树的红和黑是什么意思?红黑树能

       参考算法导论  本文篇幅可能较长需要读者慢慢理解,一步一步看。

       什么是红黑树?

       我们要了解红黑树就必须知道红黑树是什么?红黑树的红和黑是什么意思?红黑树能解决什么样的问题?红黑树解决这样问题采用的是什么方法?如果带着这样的问题去了解红黑树那么就有助于我们清楚的认识红黑树。

      首先对二叉树进行讲解(了解二叉树的同学可以跳过)

      首先二叉树这种数据结构是为了解决数据进行检索时快速的找到我们要找的数据。它区别于链表在于检索数据时所付出的时间代价是不一样的。

        

              从上图我们可以清楚的了解什么样的数据选择什么样的结构。比如我们要在集合{1,2,3,4····10000}中查找整数n,那么链表最坏的情况下的时间复杂度为O(n),而二叉树(二叉树建立的合理矮胖矮胖的)则只需要O(lg n)。而数据量越来越大时二叉树表现得越好。

            但是当二叉树的数据分布是这个样子时那它和链表的区别就很小了。

            

            这样的二叉树结构显然不是我们想要的,我们想要的是那种深度越小越好的,也就是矮矮胖胖的。

           平衡二叉树

           平衡二叉树通过在给元素插入时改变节点数据来使树的结构变得矮平。

           

             从b变为a就是平衡二叉树的作用。

             那么平衡二叉树和红黑树有什么关系呢?红黑树就是一种平衡二叉树,它是通过改变元素节点时通过左旋和右旋进行的。那么还是倒回来,红是啥?黑是啥?左旋是啥?右旋是啥?这都tm是啥?哈哈。要想了解就要了解红黑树相关的另一种2-3树,红黑树是通过2-3树演化而来。

           2-3平衡树

           首先我们看一看2-3-4平衡树的结构。

           

            其中

                  根节点5是一个2-节点   2-节点就是有一个元素和两个儿子

                  子节点7 9是一个3-节点  3-节点就是有两个元素和三个儿子

                  子节点10  11  12 是一个4-节点 4-节点就是有三个元素四个儿子

             这里我们要研究的2-3节点没有4-节点那么为什么要看2-3-4平衡树呢?

             原因就是我们要解决的关键问题:插入元素时,2-3平衡树是如何进行平衡的?

             那么我们把插入进行分类:

                     1.元素插入2-节点           

                     2.元素插入3-节点

                             1.3-节点没有父节点

                             2.3-节点有一个2-节点的父节点

                             3.3-节点有一个3-节点的父节点

                   我们一种一种分析。(下图是依次插入数据)

                    

 


推荐阅读
  • 深入探讨:Java 8 中 HashMap 链表为何选择红黑树而非 AVL 树
    深入探讨:Java 8 中 HashMap 链表为何选择红黑树而非 AVL 树 ... [详细]
  • 转载自:http:www.blogjava.netCarpenterLeearchive20160427430268.html总体介绍之所以把HashSet和HashMa ... [详细]
  • 在Java中有多种遍历HashMap的方法,注意Java中所有的Map类型都实现了共有的Map接口,所以接下来方法适用于所有Map(如:HaspMap,TreeMap,Linked ... [详细]
  • 2012年9月12日优酷土豆校园招聘笔试题目解析与备考指南
    2012年9月12日,优酷土豆校园招聘笔试题目解析与备考指南。在选择题部分,有一道题目涉及中国人的血型分布情况,具体为A型30%、B型20%、O型40%、AB型10%。若需确保在随机选取的样本中,至少有一人为B型血的概率不低于90%,则需要选取的最少人数是多少?该问题不仅考察了概率统计的基本知识,还要求考生具备一定的逻辑推理能力。 ... [详细]
  • 本文深入探讨了二叉树路径和问题的算法优化方法。具体而言,给定一棵二叉树,需要找出所有从根节点到叶节点的路径,其中各节点值的总和等于指定的目标值。通过详细分析和优化,提出了一种高效的解决方案,并通过多个样例验证了其有效性和性能。 ... [详细]
  • 投融资周报 | Circle 达成 4 亿美元融资协议,唯一艺术平台 A 轮融资超千万美元 ... [详细]
  • 本文探讨了基于点集估算图像区域的Alpha形状算法在Python中的应用。通过改进传统的Delaunay三角剖分方法,该算法能够生成更加灵活和精确的形状轮廓,避免了单纯使用Delaunay三角剖分时可能出现的过大三角形问题。这种“模糊Delaunay三角剖分”技术不仅提高了形状的准确性,还增强了对复杂图像区域的适应能力。 ... [详细]
  • HashMap、Hashtable、LinkedHashMap和TreeMap之间的区别Map主要用于存储健值对,根据键得到值,因此不允许键重复(重复了覆盖了),但允许& ... [详细]
  • 单线程化的ConcurrentHashMap的性能要比同步的HashMap的性能稍好一些,而且在并发应用中,这种作用就十分明显了。ConcurrentHashMap的实现,假定大多数常用的操 ... [详细]
  • Java集合详解5:深入理解LinkedHashMap和LRU缓存
    Java集合详解5:深入理解LinkedHashMap和LRU缓存今天我们来深入探索一下LinkedHashMap的底层原理,并且使用linkedhashmap来实现LRU缓存。具体代码在我的 ... [详细]
  • Java之HashMap在多线程情况下导致死循环的问题
    PS:不得不说Java编程思想这本书是真心强大..学习内容:1.HashMap<K,V>在多线程的情况下出现的死循环现象当初学Java的时候只是知道HashMap< ... [详细]
  • 缓存这个东西就是为了提高运行速度的,由于缓存是在寸土寸金的内存里面,不是在硬盘里面,所以容量是很有限的。LRU这个算法就是把最近一次使用时间离现在时间最远的数据删除掉。先说说List:每 ... [详细]
  • 类Hashtable<K,V>所有已实现的接口:Serializable,Cloneable,Map<K,V>此类实现一个哈希表,该哈希表将键映 ... [详细]
  • 01Map集合概述A:Map集合概述:我们通过查看Map接口描述,发现Map接口下的集合与Collection接口下的集合,它们存储数据的形式不同a:Collection中的集合 ... [详细]
  • 手写HashMap,快手面试官直呼内行
    手写HashMap,快手面试官直呼内行-手写HashMap?这么狠,面试都卷到这种程度了?第一次见到这个面试题,是在某个不方便透露姓名的Offer收割机大佬的文章:这……我当 ... [详细]
author-avatar
kobe24_3803
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有