java-红黑树的插入

红黑树作为树的一种,也是满足于BST树的基本性质的。在此基础上,红黑又多了几条自己的特性:

1.每个节点都有颜色,不是黑色就是红色

2.根节点必须是黑色

3.所有叶子节点都是黑色,叶子节点是null节点,不存储实际数据

4.每个红色节点必须有俩个黑色的子节点,也就是说不能出现连续两个红色节点

5.从任一节点到其每个叶子节点的简单路径黑色节点的个数相同

红黑树并不追求“完全平衡”——它只要求部分地达到平衡要求,降低了对旋转的要求,从而提高了性能。

红黑树能够以O(log2 n) 的时间复杂度进行搜索、插入、删除操作。此外,由于它的设计,任何不平衡都会在三次旋转之内解决。当然,还有一些更好的,但实现起来更复杂的数据结构,能够做到一步旋转之内达到平衡,但红黑树能够给我们一个比较“便宜”的解决方案。红黑树的算法时间复杂度和AVL相同,但统计性能比AVL树更高。

红黑树的插入操作:

如果树为空,直接插入调整根节点指向与颜色就好了。

如果树不为空,分为三种情况:

1.待插入位置节点的叔叔节点是红色。

这种情况下直接把父节点和叔叔节点置为黑色,把祖先节点置为红色,然后指针指向祖先节点,向上回溯,检查有没有连续两个红色节点。

2.待插入节点的叔叔节点是黑色,而待插入节点与父节点和祖先节点在同一侧。

这种情况以祖先节点进行一次右旋操作,再调整好节点的颜色就行。

 

3.待插入节点的叔叔节点是黑色,但是待插入节点与父节点和祖先节点不再同一侧。

这种情况进行两次旋转操作

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值