【前言】
当初因为觉得数据结构及算法是码农的基础(正如锄头对农民一样)才决定话费时间来补习的,但是真正自行实现算法及算法的可视化演示的时候才发现难度是如此之大。
算法写起来慢,swing界面写起来也慢。
红黑树的结构最重要就是几个规则:
1、根节点为黑色,NIL(空节点,叶节点,每一条路径最后必然会有一个叶节点作为结尾)节点为黑色。
2、红色节点不能相邻,从根节点到每一个叶节点的黑色节点数目相同。
红黑树的插入操作:请查看上一篇文章,尤其是我直接放出来的两种插入方式,看懂了那你就不会出问题了。
红黑树的删除操作:请对照上一篇文章的介绍,容易出错的地方我也用红字补充了。但是,这部分相对插入操作而言要繁琐很多,主要是需要判断的情形都有六种了,每一种都有相关操作方式,在这里我花费3天时间对照规则,编写程序,调试程序,
不得不说bug是程序员的宿命。
【程序演示及下载】
步骤一:填充演示用的数据(演示用的数据我拿了july那篇文章的部分数据,反正都是为了demo):
【下面进行操作操作】
【插入主键9.8】
【插入主键9.9】
【插入主键10.8】
【插入主键9.7】
【插入主键9.6】
【插入主键9.5】
【插入主键9.65】
【插入主键9.68】----由于我采用了简陋的画图算法,它不会按照最合适的尺寸定位,只按照最大范围,所以看不全,没关系,我分成两部分了。
【没必要再插下去了,因为插入的都是按照那几种情形来处理,下面演示删除操作】
【删除主键9.8】
【删除主键9.65】
【删除主键9.0】
【删除主键9.5】
【删除主键0.0】
【删除主键12.0】
【删除主键15.0】
【删除主键11】
【删除主键4.0】
【删除主键2.0】
【删除主键7.0】
【删除主键1.0】
想必每一位在学习红黑树的同学们都或多或少会有疑惑吧?只要坚持看,坚持写,那么就会做出来的,下面我将演示程序打包放出来:
下一篇文章将把红黑树的核心实现代码放出来。