不懂就问,红黑树的插入过程

2019-12-13 18:54:01 +08:00
 liunaijie

刚刚开始看红黑树,然后画了一下[1,3,5,7,9,2,4,6,8]这个的插入过程 画完后总感觉在插入(2)节点后,(1)节点连接了两个红色节点有点不对。但是把它转换成 2-3 树又感觉没有什么问题。所以发出来向大家请教一下。我画的这个过程对不对呢? 图片地址: https://raw.githubusercontent.com/liunaijie/images/master/20191213184917.png

2761 次点击
所在节点    程序员
5 条回复
dploop
2019-12-13 19:00:01 +08:00
有啥不对呢,没有违反红黑树的所有约束不就好了
dploop
2019-12-13 19:04:16 +08:00
不过有些地方还是不对,你插入 3 的时候没有违反红黑树约束为啥要旋转,同理插入 7 的时候也是,执行了很多无用的操作
liunaijie
2019-12-13 20:19:45 +08:00
@dploop 在 算法 这本书中是这么写的 把红节点当做 2-3 树中的 3-节点的最小值。也就是说红节点需要在左节点上。我也看了一些其他教程,也有不一样的描述。
MapHacker
2019-12-13 20:37:39 +08:00
《算法》中关于红黑树部分的内容我之前也看的很困惑,因为旋转的逻辑和别的地方看到的不太一样,比如 https://www.cs.usfca.edu/~galles/visualization/Algorithms.html 这个可视化算法的网站,后来干脆放弃《算法》,转向别的资料了。
JasperHale
2019-12-13 21:35:43 +08:00
算法一书上写是 LLRB 左倾红黑树,算是红黑树的一个变体.
左倾红黑树 与 红黑树的区别就是两个红色链接不能连到同一个节点上. 这些在插入 /删除 时的各种反转会简单不少.代码更少更容易看懂. LLRB 的论文 好像就是算法作者写的(实在记不清了). 在算法一书对应的视频中有详细讲解.

这是个坑,今年尝试刷一遍算法 /数据结构. LLRB 很快写完了.但是红黑树至今难产.

ps: https://www.cs.princeton.edu/~rs/talks/LLRB/RedBlack.pdf

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/628855

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX