热门标签 | 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-节点的父节点

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

                    

 


推荐阅读
  • 转载自:http:www.blogjava.netCarpenterLeearchive20160427430268.html总体介绍之所以把HashSet和HashMa ... [详细]
  • PHP函数的工作原理与性能分析
    在编程语言中,函数是最基本的组成单元。本文将探讨PHP函数的特点、调用机制以及性能表现,并通过实际测试给出优化建议。 ... [详细]
  • Redis 是一个高性能的开源键值存储系统,支持多种数据结构。本文将详细介绍 Redis 中的六种底层数据结构及其在对象系统中的应用,包括字符串对象、列表对象、哈希对象、集合对象和有序集合对象。通过12张图解,帮助读者全面理解 Redis 的数据结构和对象系统。 ... [详细]
  • LeetCode 实战:寻找三数之和为零的组合
    给定一个包含 n 个整数的数组,判断该数组中是否存在三个元素 a、b、c,使得 a + b + c = 0。找出所有满足条件且不重复的三元组。 ... [详细]
  • 本文详细介绍了 Java 网站开发的相关资源和步骤,包括常用网站、开发环境和框架选择。 ... [详细]
  • 一、HashSet1.虑重功能特性(HashMap实现)2.put(key)如果重复返回false***Add ... [详细]
  • 图解HashMap
    什么是HashMap,文章内HashMap源码主要来自Android7.0HashMap是开发中常用的一个类,那么他究竟是什么呢?HashMap是一个存储key-value的集合, ... [详细]
  • 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中的集合 ... [详细]
  • 专业人士如何做自媒体 ... [详细]
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社区 版权所有