红黑树介绍与应用
红黑树是特殊的二叉查找树,意味着它满足二叉查找树的特征:任意一个节点所包含的键值,大于等于左孩子的键值,小于等于右孩子的键值。
通过红黑树查找和插入的复杂对都为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)以当前节点的祖父节点进行右旋 |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具