红黑树
- 解决非平衡树问题;
- 增加了某些特点的二叉搜索树 , 自平衡二叉搜索树;
- 特征:
- 节点都有颜色(红黑,为了区分两种状态,bolean);
- 在插入和删除的过程中,要遵顼保持这些颜色的不同排列规则,规则如下: 1. 每个节点不是红就是黑;
2. 根总是黑色的;
3. 若节点是红色,则其子节点必须是黑色,反之到不一定必须为真;
4. 根到叶节点或空子节点的每条路径,必须包含相同数目的黑色节点(black height,黑色高度) (空子节点:即一个节点有左子节点没有右子节点,那么该右子节点的位置就是空子节点,有右无左亦然);
5. 空子节点是黑色的;
- 重复关键字:
- 把有相同关键字的数据项分配到其他也有相同关键字数据项的两侧很重要;
- 如40,40,40,要吧第二个40放到第一个40的右侧,第三个40放到第一个40的左侧;
- 如何修正违规的情况:
1. 改变节点的颜色;
2. 执行旋转操作,旋转必须一次做以下两件事:(左旋,右旋):
- 使一些节点上升,一些节点下降,帮助树平衡;
- 保证不破坏二叉搜索树的特征(左小右大);
红黑树的实现
1. 创建一个节点的基类:
2. 创建树的基类:
3. 红黑树的节点类:
4. 红黑树的实现类,代码稍多,其中会有些注释作为说明:
5. 红黑树的使用测试:
我是今阳,如果想要进阶和了解更多的干货,欢迎关注公众号”今阳说“接收我的最新文章