红黑树介绍与应用

红黑树是特殊的二叉查找树,意味着它满足二叉查找树的特征:任意一个节点所包含的键值,大于等于左孩子的键值,小于等于右孩子的键值。

通过红黑树查找和插入的复杂对都为O(log n)。

红黑树的性质:

1.每个节点是红的或者黑的;

2.根节点是黑的;

3.每个叶子节点是黑的;

4.如果一个节点是红的,则它的两个儿子的黑的;

5.对每个节点,从该节点到其子孙节点的所有路径上的包含相同数目的黑节点。

 

红黑树的功能有两个:1.通过key,value查找。2.利用红黑树的中序遍历是顺序的。

红黑树可以应用在

1.map

2.nginx

3.定时器

4.进程调度cfs

5.内存管理:开辟一块内存,指针指向这块内存的开始位置,并记录长度,作为红黑树的一个节点。

 

树的旋转:

 

 

红黑树的实现:

每个红黑树的节点包括6个属性:关键字 key,value,right,left,parent,color

增加节点:

 红黑树增加节点需要调整的有三种情况:

需要调整的前提条件:插入节点的父节点是红色的

1.  叔父节点是红色的

2. 叔父节点是黑色的或者没有叔父节点,当前节点是父节点的左子树(若 叔父节点不为红色,则肯定叔父节点肯定为叶子节点)

3. 叔父节点是黑色的或者没有叔父节点,当前节点是父节点的右子树

违背规则 具体情况(当前节点的父节点是红色,且父节点是祖父节点的左子树) 处理策略
情况一 叔父节点是红色的

(1)把当前节点的父节点和叔父节点改为黑色

(2)将祖父节点改为红色

(3)将祖父节点作为当前节点

(4)依次往上迭代,修改违背规则的情况,直到没有违背

情况二 叔父节点是黑色的或者没有叔父节点,当前节点是父节点的右子树

(1)以当前节点的父节点为基准,进行左旋

(2)将父节点改为黑色,祖父节点改为红色

(3)以当前节点的祖父节点进行右旋

情况二 叔父节点是黑色的或者没有叔父节点,当前节点是父节点的左子树

(1)将父节点改为黑色,祖父节点改为红色

(2)以当前节点的祖父节点进行右旋

 

posted @   放弃吧  阅读(566)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
点击右上角即可分享
微信分享提示