前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >红黑树杀人事件始末

红黑树杀人事件始末

作者头像
微观技术
发布2021-08-23 16:11:40
2390
发布2021-08-23 16:11:40
举报
文章被收录于专栏:微观技术微观技术

前言

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

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

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

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

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

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

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

正文

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2021-08-10,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 微观技术 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 正文
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档