[推荐] 教你透彻了解红黑树(修订版) [问题点数:60分,结帖人v_JULY_v]

Bbs2
本版专家分:361
结帖率 92.5%
Bbs2
本版专家分:361
Bbs2
本版专家分:361
Bbs2
本版专家分:361
Bbs2
本版专家分:361
Bbs2
本版专家分:361
Bbs2
本版专家分:361
Bbs2
本版专家分:361
Bbs2
本版专家分:361
Bbs2
本版专家分:361
Bbs2
本版专家分:361
Bbs2
本版专家分:361
Bbs2
本版专家分:361
Bbs2
本版专家分:361
Bbs2
本版专家分:361
Bbs2
本版专家分:361
Bbs2
本版专家分:361
Bbs2
本版专家分:361
Bbs2
本版专家分:361
Bbs2
本版专家分:361
Bbs2
本版专家分:361
Bbs2
本版专家分:361
Bbs2
本版专家分:361
Bbs2
本版专家分:361
Bbs2
本版专家分:361
Bbs2
本版专家分:361
Bbs2
本版专家分:361
Bbs2
本版专家分:361
Bbs2
本版专家分:361
Bbs2
本版专家分:361
Bbs2
本版专家分:361
红黑删除
感觉比AVL插入复杂很多,谁能用通俗的语言解释下,便于理解
C语言JSON字符串合法性检查
在http://www.json.org/JSON_checker/上有一个开源的工具,仅一个C文件、一个H文件,还附带UTF8转UTF16的转换工具。将main函数修改了一下,便可作为工程的一个小模块使用,检查JSON字符串的合法性,以便于进行报文解析。 /* Read input string and check. if not json string return -1, els
红黑的插入过程(图解)
<em>红黑</em><em>树</em>是一种自平衡的二叉查找<em>树</em>它具有以下5个性质:1、节点颜色必须是红色或者黑色2、根节点是黑色3、每个叶子节点(NIL节点、空节点)是黑色的4、每个红色节点的两个子节点都是黑色5、从任一节点到每个叶子的所有路径都包含数目相同的黑色节点上图就是一颗<em>红黑</em><em>树</em>,所有的空节点都指向最后这个黑色节点,称它为哨兵节点,从根节点沿任一路径出发到达哨兵节点,路径上的黑色节点总数是相同的。<em>了解</em>完<em>红黑</em><em>树</em>的基本性质,我...
MySQL索引原理与算法
B+ <em>树</em>索引 B 代表 balance 平衡; B+ <em>树</em>索引  通过键值(如 id=3 ) 并不能直接找到具体的行。 它是把 行(数据行 记录)所在的页,读入内存,再从内存中查找, 最后得到要找的记录(数据)。   二分查找法:(折半查找法)   首先  是 有一组  排好顺序的 记录。 如 10, 20,30, 40,50,60,70, 80,90,100 问题是 从这样的一组排好...
进程和线程的主要区别(总结)
根本区别:进程是操作系统资源分配的基本单位,而线程是任务调度和执行的基本单位在开销方面:每个进程都有独立的代码和数据空间(程序上下文),程序之间的切换会有较大的开销;线程可以看做轻量级的进程,同一类线程共享代码和数据空间,每个线程都有自己独立的运行栈和程序计数器(PC),线程之间切换的开销小。所处环境:在操作系统中能同时运行多个进程(程序);而在同一个进程(程序)中有多个线程同时执行(通过CPU调...
红黑的颜色值有什么特殊的意义?
https://bbs.csdn.net/topics/390622992?page=1<em>红黑</em><em>树</em>的节点有红色或黑色的属性,这个颜色对当前的节点有什么意义,想不明显,请指<em>教</em>。SWITCH的特殊用法发表于: 2013-10-23 20:45:32 楼主对我有用[0] | 丢个板砖[0] | 引用 | 举报 | 管理回复次数:3CSDN推荐阻抗匹配及其作用真正理解<em>红黑</em><em>树</em>,真正的(Linux内核里大量用到的...
贝叶斯的笔试题
小王要去外地出差几天,家里有一盆化交给邻居帮忙照顾,若已知如果几天内邻居记得浇水,花存活的概率为0.8.如果几天内邻居忘记浇水,花存活的概率为0.3,假设小王对邻居不<em>了解</em>,即可以认为他记得和忘记浇水的概率均为0.5,问:如果几天后他回来发现花还活着,那么邻居记得浇水的概率是多少? 解:利用XXX表示花的状态,利用YYY表示邻居是否浇水。 X=1X=1X=1表示花存活,X=0X=0{X=0} 表...
红黑.zip
<em>红黑</em><em>树</em>自顶向下的实现,包含插入,插入调整,删除,删除调整,层次遍历等等
线程的5种状态详解
Java中的线程的生命周期大体可分为5种状态。 1.新建(NEW):新创建了一个线程对象。 2.可运行(RUNNABLE):线程对象创建后,其他线程(比如main线程)调用了该对象的start()方法。该状态的线程位于可运行线程池中,等待被线程调度选中,获取cpu 的使用权 。 3.运行(RUNNING):可运行状态(runnable)的线程获得了cpu 时间片(timeslic...
http协议与SMTP协议的区别?
计算机网络-自顶向下的方法(第四版 James F.Kurose Keith W.Ross著)P148 http协议与SMTP协议的区别?   首先,这两种协议都被用来,从一个主机向另一主机传递File的;对于http来讲,它一般把一些文件(例如 html文件)从一个web server传递到 web client那里,例如你平时打开个网页。对于SMTP来说它传递的是e-mail文件,从一个m
java字符串中找出最大的“连续的” 子字符串”的长度。
-
Q58:红黑
<em>红黑</em><em>树</em>。
HashMap源码解析
以jdk1.8为例,HashMap是一个用于存储Key-Value键值对的集合,每一个键值对是一个Node(jdk1.7叫做Entry)。后台是用一个Node数组来存放数据,这个Node数组就是HashMap的主干。 这里我们主要来分析HashMap的get和put方法。 put public V put(K key, V value) { return putVal(hash...
快速排序非递归java
private static void quickSort(int[] a, int start, int end) { LinkedList stack = new LinkedList(); // 用栈模拟 if (start < end) { stack.push(end); s
java堆排序非递归代码,无原理版,比较好理解
public class HeapOperate { /* * 建立堆时只需要保证根结点小于两个子结点或者大于两个子结点,对两个子结点大小没有要求 */ public static void main(String[] args) { //数组0下标元素作为暂存单元 int data[] = {0, 3, 8, 15, 2, 7, 9, 1, 38}; int len =
为什么红黑的时间复杂度为lgn——渐进边界的证明
维基百科 包含n个内部节点的<em>红黑</em><em>树</em>的高度是 O(log(n))。 定义: h(v) = 以节点v为根的子<em>树</em>的高度。bh(v) = 从v到子<em>树</em>中任何叶子的黑色节点的数目(如果v是黑色则不计数它)(也叫做黑色高度)。 引理: 以节点v为根的子<em>树</em>有至少个内部节点。 引理的证明(通过归纳高度): 基础: h(v) = 0 如果v的高度是零则它必定是 nil,因
透彻了解红黑
本篇文章转载自:http://blog.csdn.net/v_july_v/article/details/6105630#comments 在众多的博客中解析如此的深入精辟,特地转载以备以后的学习,同时也和大家一起向作者学习这种大神的精神。 本文参考:Google、算法导论、STL源码剖析、计算机程序设计艺术。 推荐阅读: Left-Leaning Red-Bla
迷宫生成算法和迷宫寻路算法
迷宫生成算法和迷宫寻路算法 大学二年级的时候,作为对栈这个数据结构的复习,我制作了一个迷宫生成算法的小程序,当时反响十分好,过了几天我又用自己已经
chmod +x,赋予“可执行”权限
1、chmod +x的意思就是给执行权限 (1)、LINUX下不同的文件类型有不同的颜色, 绿色文件: 可执行文件,可执行的程序 红色文件:压缩文件或者包文件 蓝色文件:目录 白色文件:一般性文件,如文本文件,配置文件,源码文件等 浅蓝色文件:链接文件,主要是使用ln命令建立的文件 红色闪烁:表示链接的文件有问题 黄色:表示设备文件 灰色:表示其他文件 (2)、因此wge...
一款消消乐游戏的自动解法
消消乐游戏自动求解
tailf、tail -f、tail -F三者区别(转)
tail -f      等同于--follow=descriptor,根据文件描述符进行追踪,当文件改名或被删除,追踪停止 tail -F     等同于--follow=name  --retry,根据文件名进行追踪,并保持重试,即该文件被删除或改名后,如果再次创建相同的文件名,会继续追踪 tailf         等同于tail -f -n 10(貌似tail -f或-F默认也...
C fork()&&fork()||fork()
一道关于fork创建进程个数的题目: #include int main() {   fork(); fork()&&fork()||fork(); fork(); return 0; } 问除了第一个父进程,这个程序到底创建了多少进程? 这道题主要考了两个知识点,一是逻辑运算符运行的特点;二是对fork的理解。 如果有一个这样的表达式:cond1 && cond2 ||
随机迷宫生成算法整理分析
搜集整理了一些游戏迷宫生成的算法与实现前言前段时间学校游戏开发课大作业,做了一个Roguelike的恐怖游戏。搜集整理了一些迷宫生成的算法。当初也受了indienova上一些文章的启发。现在在此把学到的一些东西理一理分享出来。第一次写这种东西,感觉有点啰嗦,还请大家不要介意,也可以直接看项目地址代码写在Unity环境下,应该可以直接使用。第一种算法先上一张图这是我最早拍脑袋凭着感觉写的一个算法结果...
红黑(2)保持平衡的根本套路
有<em>了解</em>过的同学们应该都知道,<em>红黑</em><em>树</em>为了保持平衡,有三个基本的操作:左旋、右旋和着色。(不知道的同学也没关系 ,因为在此我只想告诉你们的是这三个操作都是为了什么) 首先要有这样一个意识:这棵<em>红黑</em><em>树</em>在你插入新节点之前就是平衡的(不理解<em>红黑</em><em>树</em>平衡的可看上一节),我们要做的是使新节点插入后也平衡。 比如当只有一个根节点时,它是平衡的,当你再插入一个节点时,无论是放左边还是右边,都会使原来的...
红黑为什么需要旋转?
书上说<em>红黑</em><em>树</em>插入节点时,会改变颜色属性,此时需要旋转,但是我很不理解什么情况下需要旋转,旋转的作用究竟是什么?
数据结构——栈(面试题)
在一个栈的输入序列为12345 下面哪个不可能是栈的输出序列?A. 23415  B.54132  C.23145  D.15432第二个。54132不可能。23415------&amp;gt;1进栈,2进栈,2出栈,3进栈,3出栈,4进栈,4出栈,1出栈,5进栈,5出栈23145------&amp;gt;1进栈,2进栈,2出栈,3进栈,3出栈,1出栈,4进栈,4出栈,5进栈,5出栈15432------&amp;g...
二叉、B以及B+
数据库索引结构一般引用B<em>树</em>或者索引。利用<em>树</em>结构的原因?<em>树</em>结构查询效率更高节点按照顺序排列二叉<em>树</em>结构B<em>树</em>结构一个m阶的B<em>树</em>具有如下几个特征:1.根结点至少有两个子女。2.每个中间节点都包含k-1个元素和k个孩子,其中 m/2 &lt;= k &lt;= m3.每一个叶子节点都包含k-1个元素,其中 m/2 &lt;= k &lt;= m4.所有的叶子结点都位于同一层。5.每个节点中的元素从小到大排列...
二叉和堆(理论)
<em>树</em> 1.<em>树</em>其实就是不包含回路的连通无向图。 2.一棵<em>树</em>中的任意两个结点有且仅有唯一的一条路径连通。 3.一棵<em>树</em>如果有n个结点,那么它一定恰好有n-1条边。 二叉<em>树</em> 二叉<em>树</em>是一种特殊的<em>树</em>。二叉<em>树</em>的特点是每个结点最多有两个儿子,左边的叫做左儿子,右边的叫做右儿子,或者说每个结点最多有两棵子<em>树</em>。更加严格的递归定义是:二叉<em>树</em>要么为空,要么由根结点、左子<em>树</em>和右子<em>树</em>组成,而左子<em>树</em>和右子<em>树</em>分别是一棵二...
红黑的删除—10张图学会
如果要学<em>红黑</em><em>树</em>,那么就必须知道二叉<em>树</em>,毕竟<em>红黑</em><em>树</em>本身就是一个二叉搜索<em>树</em>。只不过<em>红黑</em><em>树</em>比一般的二叉搜索<em>树</em>更加稳定,也就是更加平衡,但是有没有AVL<em>树</em>那么的稳定,这换来的是<em>红黑</em><em>树</em>比AVL数有更好的插入和删除效率,但是查找效率并没有比AVL差很多。下文我将用RBT代替<em>红黑</em><em>树</em>。二叉搜索<em>树</em>的删除介绍RBT的删除,就先要知道二叉搜索<em>树</em>的删除(知道的同学可以直接跳过)。删除分为四步: 1.找到删除点假设为X
jdk1.8 HashMap工作原理和扩容机制(源码解析)
HashMap简介:     HashMap在底层数据结构上采用了数组+链表+<em>红黑</em><em>树</em>,通过散列映射来存储键值对数据因为在查询上使用散列码(通过键生成一个数字作为数组下标,这个数字就是hash code)所以在查询上的访问速度比较快,HashMap最多允许一对键值对的Key为Null,允许多对键值对的value为Null。它是非线程安全的。在排序上面是无序的。   HashMap的主要成员变量...
优先队列
优先队列 引入 优先队列是一种特殊的队列,在学习堆排序的时候就有所<em>了解</em>,点“击”查看。 那么优先队列是什么呢? 说白了,就是一种功能强大的队列。如果不太清楚队列,可以看看我这篇博客。 它的功能强大在哪里呢? 四个字:自动排序。 优先队列的头文件&amp;amp;&amp;amp;声明 首先,你需要 #include&amp;...
既然红黑那么好,为啥hashmap不直接采用红黑,而是当大于8个的时候才转换红黑
既然<em>红黑</em><em>树</em>那么好,为啥hashmap不直接采用<em>红黑</em><em>树</em>,而是当大于8个的时候才转换<em>红黑</em><em>树</em>?
cartographer源码阅读(1)——算法整体结构
今天尝试阅读cartographer源码这个大魔王,把自己的理解写下来。首先最重要的是cartographer文档里这张图,描述了算法的结构,首先对这张图分析。 cartographer算法结构分析 整个算法分为两大部分:Local SLAM (前端检测),还有Global SLAM (后端闭环)。 这里输入的传感器数据有四个:Range Data(激光雷达,摄像头等),Odometry...
从二叉查找、2-3彻底理解红黑
从二叉查找<em>树</em>、2-3<em>树</em>彻底理解<em>红黑</em><em>树</em> 引言 在学习<em>红黑</em><em>树</em>的时候,看了很多文章,发现都没有讲明白<em>红黑</em><em>树</em>的原理,只是简单列了<em>红黑</em><em>树</em>的几条规则,就开始讲解<em>红黑</em><em>树</em>的插入,让人一直不知其所以然。也很难深刻的理解<em>红黑</em><em>树</em>。 最后翻起了《算法》这本书,仔细<em>了解</em>了二叉<em>树</em>查找<em>树</em>、2-3<em>树</em>、<em>红黑</em><em>树</em>,才明白了<em>红黑</em><em>树</em>不是平白无故产生的,而是符合科学的发展观念是循序渐进,站在巨人的肩旁上发展起来的。 这也是我们从...
红黑的删除操作
原文:https://segmentfault.com/a/1190000012115424 可能出现的情形讨论 删除<em>红黑</em><em>树</em>中一个结点,删除的结点是其子结点状态和颜色的组合。子结点的状态有三种:无子结点、只有一个子结点、有两个子结点。颜色有红色和黑色两种。所以共会有6种组合。 组合1:被删结点无子结点,且被删结点为红色 此时直接将结点删除即可,不破坏任何<em>红黑</em><em>树</em>的性质。 组合2:被删...
9.HashMap里的红黑是什么
1. 简介<em>红黑</em><em>树</em>是一种自平衡二叉查找<em>树</em>。它的统计性能要好于平衡二叉<em>树</em>(AVL<em>树</em>),因此,<em>红黑</em><em>树</em>在很多地方都有应用。在C++ STL中,很多部分(目前包括set, multiset, map,multimap)应用了<em>红黑</em><em>树</em>的变体(SGI STL中的<em>红黑</em><em>树</em>有一些变化,这些修改提供了更好的性能,以及对set操作的支持)。它是复杂的,但它的操作有着良好的最坏情况运行时间,并且在实践中是高效的: 它可以在O...
java向上取整函数Math.ceil()
java取整函数Math.ceil()        百度Math.ceil()函数:“Math.ceil()是常见编程语言中的常用代码,ceil() 方法执行的是向上取整计算,它返回的是大于或等于函数参数,并且与之最接近的整数。“        在使用中发现,Math.ceil(param)的参数param需要严格double数据类型的才能有效实现向上取整的效果。 示例: dou
OJ多组测试数据的输入(Java代码实现)
Java:必须是public class Main提交,并且不能带包名,输入和输出的格式一定要按照题目要求的去写,否则提交不过。输入不可用文件输入。使用 Scanner sc=new Scanner(System.in); 1.  多组数据,每组数据一个n(5 接下来n个整数Xi (1 Sample Input 4 1 2 3 4 5 1 2
java 使用取整函数
java 使用取整函数 java 使用取整函数 java 使用取整函数
图解红黑
<em>红黑</em><em>树</em> : 平衡的二叉查找<em>树</em> ,时间复杂度o(log(n)),任何插入或删除能在三次旋转以内平衡 特性 : 节点是红色或者黑色 根节点是黑色 每个叶子的节点都是黑色的空点节点 每个红色节点的两个子节点都是黑色 从任意节点到其每个叶子的所有路径都包含相同的黑色节点 因为这些规则才能保证<em>红黑</em><em>树</em>的自平衡,最长路径不超过最短路径的2倍 <em>红黑</em><em>树</em>是通过旋转来保证在添加或删除元素后依旧能维持<em>红黑</em><em>树</em>性质的。 ...
红黑与平衡二叉区别?
如果说平衡二叉<em>树</em>是一个类的话,那么<em>红黑</em><em>树</em>就是该类的一个实例。 算法的书我丢久了,一下子也找不到,我是凭记忆说的。<em>红黑</em><em>树</em>的算法比较麻烦,但它的思想很好,如果理解了它的思想也就理解它的算法,我也只记得思想,具体算法记不得了。我就在这说说思想吧。 <em>红黑</em><em>树</em>有两个重要性质: 1、红节点的孩子节点不能是红节点; 2、从根到前端节点的任意一条路径上的黑节点数目一样多。 这两条性质确保该<em>树</em>的高度为l
STL源码剖析之——红黑
1、前言我们知道,一颗由n个节点随机构造的二叉搜索<em>树</em>的高度为logn,但是,由于输入值往往不够随机,导致二叉搜索<em>树</em>可能失去平衡,造成搜索效率低下的情况。从而,引出了平衡二叉搜索<em>树</em>的概念。对于“平衡”这个约束不同的结构有不同的规定,如AVL<em>树</em>要求任何节点的两个子<em>树</em>的高度最大差别为1,可谓是高度平衡啊;而<em>红黑</em><em>树</em>仅仅确保没有一条路径会比其他路径长出两倍,因而达到接近平衡的目的。<em>红黑</em>数不仅是一个平衡二叉搜...
红黑 与 B+区别和应用场景
<em>红黑</em><em>树</em> <em>红黑</em><em>树</em>是每个节点都带有颜色属性的二叉查找<em>树</em>,颜色或红色或黑色。在二叉查找<em>树</em>强制一般要求以外,对于任何有效的<em>红黑</em><em>树</em>我们增加了如下的额外要求: 1. 节点是红色或黑色 2. 根节点是黑色。 3 每个叶节点(NIL节点,空节点)是黑色的。 4 每个红色节点的两个子节点都是黑色。(从每个叶子到根的所有路径上不能有两个连续的红色节点) 5. 从任一节点到其每个叶子的所有路径都...
红黑和AVL(平衡二叉)区别
AVL<em>树</em>(平衡二叉<em>树</em>)(1)简介AVL<em>树</em>是带有平衡条件的二叉查找<em>树</em>,一般是用平衡因子差值判断是否平衡并通过旋转来实现平衡,左右子<em>树</em><em>树</em>高不超过1,和<em>红黑</em><em>树</em>相比,它是严格的平衡二叉<em>树</em>,平衡条件必须满足(所有节点的左右子<em>树</em>高度差不超过1)。不管我们是执行插入还是删除操作,只要不满足上面的条件,就要通过旋转来保持平衡,而旋转是非常耗时的,由此我们可以知道AVL<em>树</em>适合用于插入删除次数比较少,但查找多的情况(...
真正理解红黑,真正的
作为一种数据结构,<em>红黑</em><em>树</em>可谓不算朴素,因为各种宣传让它过于神秘,网上搜罗了一大堆的关于<em>红黑</em><em>树</em>的文章,不外乎千篇一律,介绍概念,分析性能,贴上代码,然后给上罪恶的一句话,它最坏情况怎么怎么地...               我们想,一棵二叉<em>树</em>怎么就是最坏情况,那就是它退化为一个链表,这样查找就成了遍历。问题是,平衡二叉<em>树</em>怎么会退回链表!它是怎么保持平衡的?能不能简单地阐述?当然可以!一般的讲述<em>红黑</em>...
红黑的快速实现
<em>红黑</em><em>树</em>的概述: <em>红黑</em><em>树</em>本质上是一种二叉查找<em>树</em>,但它在二叉查找<em>树</em>的基础上额外添加了一个标记(颜色),同时具有一定的规则。这些规则使<em>红黑</em><em>树</em>保证了一种平衡,插入、删除、查找的最坏时间复杂度都为 O(logn)。 <em>红黑</em><em>树</em>的性质: 1、每个节点要么是红色,要么是黑色; 2、根节点永远是黑色的; 3、所有的叶节点都是是黑色的(注意这里说叶子节点其实是上图中的 NIL 节点); 4、每个红色节点的两个子节...
例解红黑的5条规则
<em>红黑</em><em>树</em>有五条规则,本文主要就这五条规则给出一个图文的说明
红黑原理及实现
<em>红黑</em><em>树</em>: 一颗二叉搜索<em>树</em>,每个节点上增加了一个存储位来表示节点的颜色,通过对任意一条叶子节点到根节点的路径上的颜色进行约束,保证最长路径不超过最短路径的两倍,因此<em>红黑</em><em>树</em>是近似平衡。 <em>红黑</em><em>树</em>因为是近似平衡,在构建<em>红黑</em><em>树</em>的时候触发的旋转自然要比AVL<em>树</em>少(AVL<em>树</em>触发旋转是左子<em>树</em>和右子<em>树</em>高度之差的绝对值大于1),构建<em>树</em>的效率降低; <em>红黑</em><em>树</em>的时间复杂度是O(n*logN),AVL<em>树</em>的时间...
jschart示例-jsp和xml的下载
jschart示例,包括柱状、线状、园状数据图,很实用,和大家分享一下 相关下载链接:[url=//download.csdn.net/download/wenxuyi/2006076?utm_source=bbsseo]//download.csdn.net/download/wenxuyi/2006076?utm_source=bbsseo[/url]
数字温度PWM控制仪下载
本装置要求利用单片机及二极管(-2mV/度)或AD590(1uA/K)温度传感器测量温度,并将测量温度值和设定温度值(50度)比较,根据比较结果控制断续加热器(用发光二极管模拟)通断占空比,一个工作周期3S左右。 具体要求: 温度测量范围0-100度,并在数码管上显示温度值。温度测量误差小于5度,能进行当前环境温度调校。当温度≥50度时, 模拟发光二极管全灭。当温度≤30度时,模拟发光二极管全亮,当30≤温度≤50时,输出占空比=(50-t)/20。 相关下载链接:[url=//download.csdn.net/download/pinggai110/3286493?utm_source=bbsseo]//download.csdn.net/download/pinggai110/3286493?utm_source=bbsseo[/url]
DS18B20测温程序.exe下载
DS18B20测温程序.exe 上位机 直接运行 相关下载链接:[url=//download.csdn.net/download/dingshidong/4364918?utm_source=bbsseo]//download.csdn.net/download/dingshidong/4364918?utm_source=bbsseo[/url]
相关热词 c#检测非法字符 c#双屏截图 c#中怎么关闭线程 c# 显示服务器上的图片 api嵌入窗口 c# c# 控制网页 c# encrypt c#微信网页版登录 c# login 居中 c# 考试软件
我们是很有底线的