红黑树杀人事件始末

前言

红黑树是算法领域中一个著名的二叉查找树实现,它能够以较小的开销保持二叉查找树的平衡。具备平衡性质的二叉查找树能够极大地提高节点的查询速度。举个形象一点的例子:从一个十亿节点的红黑树中查找一个节点,所需要的查询次数不到 30,这不禁让人感叹算法的魅力。

红黑树是工程中最常见的二叉查找树的实现,例如在 Linux 的内存管理和进程管理中就用到了红黑树;Java 语言的集合包、C++语言的标准模板库中均提供了红黑树的实现类。

红黑树本身的设计很复杂,多数情况下我们也不需要自己去实现红黑树,但研究红黑树还是有意义的。一方面可以让学习者领略这种神奇的数据结构的奥妙,另一方面可以作为一种思维训练工具,提升自己的算法设计能力。

本文以漫画形式讲述红黑树,第一话讲解二叉查找树的概念和基本操作,包括节点查找、插入、删除;第二话讲解二叉查找树的缺点和红黑树的概念,以及红黑树的节点旋转操作;第三话讲解红黑树的节点插入操作;第四话讲解红黑树的节点删除操作;第五话和彩蛋部分讲解红黑树在插入修正和删除修正时,对各种 CASE 所进行的调整操作背后的思想。

红黑树的实现中,最难的部分在于实现节点的插入和删除时,要穷举所有可能的 CASE,然后对每种 CASE 进行处理。在理解节点的插入和删除的过程时,读者要把握住一个中心:每种 CASE 所进行的调整步骤都在尽量恢复插入/删除节点后所违反的红黑树特性,如果当前 CASE 解决不了,就转成另一种更接近问题解决状态的 CASE。每种 CASE 的所进行的调整步骤都是为了向解决问题的出口更靠近一步,直至找到出口。

漫画采用大量的图示来展示红黑树操作的诸多细节,作者力求详尽,因此篇幅略长。在 PDF 中给出了完整的二叉查找树定义 + 测试代码,以及红黑树定义 + 测试代码。两份代码均经过了若干次十万数量级随机节点插入和删除测试,结果均无误。读者可贴到自己的 IDE 中,结合本文讲解进行调试研究。

在电脑端本文阅读效果更佳。另外,读者可联系码海公众号博主(微信:geekoftaste)获取本漫画的完整 PDF 版本

正文

红黑树杀人事件始末_第1张图片 红黑树杀人事件始末_第2张图片 红黑树杀人事件始末_第3张图片 红黑树杀人事件始末_第4张图片 红黑树杀人事件始末_第5张图片 红黑树杀人事件始末_第6张图片 红黑树杀人事件始末_第7张图片 红黑树杀人事件始末_第8张图片 红黑树杀人事件始末_第9张图片 红黑树杀人事件始末_第10张图片 红黑树杀人事件始末_第11张图片 红黑树杀人事件始末_第12张图片 红黑树杀人事件始末_第13张图片 红黑树杀人事件始末_第14张图片 红黑树杀人事件始末_第15张图片 红黑树杀人事件始末_第16张图片 红黑树杀人事件始末_第17张图片 红黑树杀人事件始末_第18张图片 红黑树杀人事件始末_第19张图片 红黑树杀人事件始末_第20张图片 红黑树杀人事件始末_第21张图片 红黑树杀人事件始末_第22张图片 红黑树杀人事件始末_第23张图片 红黑树杀人事件始末_第24张图片 红黑树杀人事件始末_第25张图片 红黑树杀人事件始末_第26张图片 红黑树杀人事件始末_第27张图片 红黑树杀人事件始末_第28张图片 红黑树杀人事件始末_第29张图片 红黑树杀人事件始末_第30张图片 红黑树杀人事件始末_第31张图片 红黑树杀人事件始末_第32张图片 红黑树杀人事件始末_第33张图片 红黑树杀人事件始末_第34张图片 红黑树杀人事件始末_第35张图片 红黑树杀人事件始末_第36张图片 红黑树杀人事件始末_第37张图片 红黑树杀人事件始末_第38张图片 红黑树杀人事件始末_第39张图片 红黑树杀人事件始末_第40张图片 红黑树杀人事件始末_第41张图片 红黑树杀人事件始末_第42张图片 红黑树杀人事件始末_第43张图片 红黑树杀人事件始末_第44张图片 红黑树杀人事件始末_第45张图片 红黑树杀人事件始末_第46张图片 红黑树杀人事件始末_第47张图片 红黑树杀人事件始末_第48张图片 红黑树杀人事件始末_第49张图片 红黑树杀人事件始末_第50张图片 红黑树杀人事件始末_第51张图片 红黑树杀人事件始末_第52张图片 红黑树杀人事件始末_第53张图片 红黑树杀人事件始末_第54张图片 红黑树杀人事件始末_第55张图片 红黑树杀人事件始末_第56张图片 红黑树杀人事件始末_第57张图片 红黑树杀人事件始末_第58张图片 红黑树杀人事件始末_第59张图片 红黑树杀人事件始末_第60张图片 红黑树杀人事件始末_第61张图片 红黑树杀人事件始末_第62张图片 红黑树杀人事件始末_第63张图片 红黑树杀人事件始末_第64张图片 红黑树杀人事件始末_第65张图片 红黑树杀人事件始末_第66张图片 红黑树杀人事件始末_第67张图片 红黑树杀人事件始末_第68张图片 红黑树杀人事件始末_第69张图片 红黑树杀人事件始末_第70张图片 红黑树杀人事件始末_第71张图片 红黑树杀人事件始末_第72张图片 红黑树杀人事件始末_第73张图片 红黑树杀人事件始末_第74张图片 红黑树杀人事件始末_第75张图片 红黑树杀人事件始末_第76张图片 红黑树杀人事件始末_第77张图片 红黑树杀人事件始末_第78张图片 红黑树杀人事件始末_第79张图片 红黑树杀人事件始末_第80张图片 红黑树杀人事件始末_第81张图片 红黑树杀人事件始末_第82张图片 红黑树杀人事件始末_第83张图片 红黑树杀人事件始末_第84张图片 红黑树杀人事件始末_第85张图片 红黑树杀人事件始末_第86张图片 红黑树杀人事件始末_第87张图片 红黑树杀人事件始末_第88张图片 红黑树杀人事件始末_第89张图片 红黑树杀人事件始末_第90张图片 红黑树杀人事件始末_第91张图片 红黑树杀人事件始末_第92张图片 红黑树杀人事件始末_第93张图片 红黑树杀人事件始末_第94张图片 红黑树杀人事件始末_第95张图片 红黑树杀人事件始末_第96张图片 红黑树杀人事件始末_第97张图片 红黑树杀人事件始末_第98张图片 红黑树杀人事件始末_第99张图片 红黑树杀人事件始末_第100张图片 红黑树杀人事件始末_第101张图片 红黑树杀人事件始末_第102张图片 红黑树杀人事件始末_第103张图片 红黑树杀人事件始末_第104张图片 红黑树杀人事件始末_第105张图片 红黑树杀人事件始末_第106张图片 红黑树杀人事件始末_第107张图片 红黑树杀人事件始末_第108张图片 红黑树杀人事件始末_第109张图片 红黑树杀人事件始末_第110张图片 红黑树杀人事件始末_第111张图片 红黑树杀人事件始末_第112张图片 红黑树杀人事件始末_第113张图片 红黑树杀人事件始末_第114张图片 红黑树杀人事件始末_第115张图片 红黑树杀人事件始末_第116张图片 红黑树杀人事件始末_第117张图片 红黑树杀人事件始末_第118张图片 红黑树杀人事件始末_第119张图片 红黑树杀人事件始末_第120张图片 红黑树杀人事件始末_第121张图片 红黑树杀人事件始末_第122张图片 红黑树杀人事件始末_第123张图片 红黑树杀人事件始末_第124张图片 红黑树杀人事件始末_第125张图片 红黑树杀人事件始末_第126张图片 红黑树杀人事件始末_第127张图片 红黑树杀人事件始末_第128张图片 红黑树杀人事件始末_第129张图片 红黑树杀人事件始末_第130张图片 红黑树杀人事件始末_第131张图片 红黑树杀人事件始末_第132张图片 红黑树杀人事件始末_第133张图片 红黑树杀人事件始末_第134张图片 红黑树杀人事件始末_第135张图片 红黑树杀人事件始末_第136张图片 红黑树杀人事件始末_第137张图片 红黑树杀人事件始末_第138张图片 红黑树杀人事件始末_第139张图片 红黑树杀人事件始末_第140张图片 红黑树杀人事件始末_第141张图片 红黑树杀人事件始末_第142张图片 红黑树杀人事件始末_第143张图片 红黑树杀人事件始末_第144张图片 红黑树杀人事件始末_第145张图片 红黑树杀人事件始末_第146张图片 红黑树杀人事件始末_第147张图片 红黑树杀人事件始末_第148张图片 红黑树杀人事件始末_第149张图片 红黑树杀人事件始末_第150张图片 红黑树杀人事件始末_第151张图片 红黑树杀人事件始末_第152张图片 红黑树杀人事件始末_第153张图片 红黑树杀人事件始末_第154张图片 红黑树杀人事件始末_第155张图片 红黑树杀人事件始末_第156张图片 红黑树杀人事件始末_第157张图片 红黑树杀人事件始末_第158张图片 红黑树杀人事件始末_第159张图片 红黑树杀人事件始末_第160张图片 红黑树杀人事件始末_第161张图片 红黑树杀人事件始末_第162张图片 红黑树杀人事件始末_第163张图片 红黑树杀人事件始末_第164张图片 红黑树杀人事件始末_第165张图片 红黑树杀人事件始末_第166张图片 红黑树杀人事件始末_第167张图片 红黑树杀人事件始末_第168张图片 红黑树杀人事件始末_第169张图片 红黑树杀人事件始末_第170张图片 红黑树杀人事件始末_第171张图片 红黑树杀人事件始末_第172张图片 红黑树杀人事件始末_第173张图片 红黑树杀人事件始末_第174张图片 红黑树杀人事件始末_第175张图片 红黑树杀人事件始末_第176张图片 红黑树杀人事件始末_第177张图片 红黑树杀人事件始末_第178张图片 红黑树杀人事件始末_第179张图片 红黑树杀人事件始末_第180张图片 红黑树杀人事件始末_第181张图片 红黑树杀人事件始末_第182张图片 红黑树杀人事件始末_第183张图片 红黑树杀人事件始末_第184张图片 红黑树杀人事件始末_第185张图片 红黑树杀人事件始末_第186张图片 红黑树杀人事件始末_第187张图片 红黑树杀人事件始末_第188张图片 红黑树杀人事件始末_第189张图片 红黑树杀人事件始末_第190张图片 红黑树杀人事件始末_第191张图片 红黑树杀人事件始末_第192张图片 红黑树杀人事件始末_第193张图片 红黑树杀人事件始末_第194张图片 红黑树杀人事件始末_第195张图片 红黑树杀人事件始末_第196张图片 红黑树杀人事件始末_第197张图片 红黑树杀人事件始末_第198张图片 红黑树杀人事件始末_第199张图片 红黑树杀人事件始末_第200张图片 红黑树杀人事件始末_第201张图片 红黑树杀人事件始末_第202张图片 红黑树杀人事件始末_第203张图片 红黑树杀人事件始末_第204张图片 红黑树杀人事件始末_第205张图片 红黑树杀人事件始末_第206张图片 红黑树杀人事件始末_第207张图片 红黑树杀人事件始末_第208张图片 红黑树杀人事件始末_第209张图片 红黑树杀人事件始末_第210张图片 红黑树杀人事件始末_第211张图片 红黑树杀人事件始末_第212张图片 红黑树杀人事件始末_第213张图片 红黑树杀人事件始末_第214张图片 红黑树杀人事件始末_第215张图片 红黑树杀人事件始末_第216张图片 红黑树杀人事件始末_第217张图片 红黑树杀人事件始末_第218张图片 红黑树杀人事件始末_第219张图片 红黑树杀人事件始末_第220张图片 红黑树杀人事件始末_第221张图片 红黑树杀人事件始末_第222张图片 红黑树杀人事件始末_第223张图片 红黑树杀人事件始末_第224张图片 红黑树杀人事件始末_第225张图片 红黑树杀人事件始末_第226张图片 红黑树杀人事件始末_第227张图片 红黑树杀人事件始末_第228张图片 红黑树杀人事件始末_第229张图片 红黑树杀人事件始末_第230张图片 红黑树杀人事件始末_第231张图片 红黑树杀人事件始末_第232张图片 红黑树杀人事件始末_第233张图片 红黑树杀人事件始末_第234张图片 红黑树杀人事件始末_第235张图片 红黑树杀人事件始末_第236张图片 红黑树杀人事件始末_第237张图片 红黑树杀人事件始末_第238张图片 红黑树杀人事件始末_第239张图片 红黑树杀人事件始末_第240张图片 红黑树杀人事件始末_第241张图片 红黑树杀人事件始末_第242张图片 红黑树杀人事件始末_第243张图片 红黑树杀人事件始末_第244张图片 红黑树杀人事件始末_第245张图片

你可能感兴趣的:(算法,java,数据结构,编程语言,算法导论)