本文主要是介绍红黑树教程与实验平台——不信你再不懂红黑树!,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
自制的红黑树教程与实验平台:https://github.com/Jinzhe-Zhang/Red_Black_Tree
界面:
命令台操作(动图,可能会卡):
建议观看这个视频教程后再学习使用
几个月前,红黑树给我的感觉就是:
- 听说过一百次
- 但就是?不会
想着不能再这么gg下去,于是大前天终于决定拿下红黑树了!
刚开始看了几个红黑树的教程都没太耐着性子看,步骤太多还杂。最后就是照着这个视频教程一点点抠完红黑树增删结点的整个过程。
为了巩固每一步操作,我先码了Ruby代码,后又对每一步加上了解释顺便找一找bug。有些操作还是有细微差别的,而且很多差别只有自己码代码的时候才能发现:
比如插入操作中最后一条 “ 转后我与祖父色互换 ” 在我的程序中是 “ 转后新父旧祖父色互换 ” (由于新树中父亲最大,记成 “ 新旧长辈色互换 ” ),做两次旋转的操作 “ 三角转直直再转 ” 时,我借助学习AVL树时处理左右单双旋的经验,以七段分的方法替代两次旋转。这些在程序里都已经有详细的说明了。
最后附上口诀,希望这个程序能够帮助到大家:
插入口诀
我根我爸黑,那就很简单
我爸要是红
伯伯也红,黑爸黑伯红祖父
伯伯若黑,七段拆合
新旧长辈色互换
全部结束根染黑
删除口诀
删除节点两后代,交换键值往下看。
删除节点是树根,直接删除或替换。
删除节点无后代,自己若黑修双黑。
删除节点有一子,直接替换染成黑。
修复双黑口诀
无兄弟,再修父
兄为红,红父黑兄再转上
兄为黑
兄无红儿看父亲
父为红,染黑父,父为黑,再修父
若有红儿儿染黑,
七段拆合,新旧长辈色互换。
这篇关于红黑树教程与实验平台——不信你再不懂红黑树!的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!