随笔 - 229  文章 - 0  评论 - 10  阅读 - 26万 

常见算法与数据结构
暴力:
二分: 前提,有序 , 时间复杂度O(lgn) ----> 转换成数据结构: 二叉树(二叉查找树,二叉搜索, 二叉有序树)
哈希: 最高效 , O(1), hash冲突 , jdk1.8 hashmap中的数据结构: 链表+红黑树(处理hash冲突的)
插值
索引: 搜索引擎 ,Lucene
bfs&dfs : 图论里面的遍历
平衡树AVL
B+树
B-Tree
二叉搜索树: 树的深度就是时间复杂度
红黑树 : 高效的查找结构, 底层也是一颗特殊的二叉查找树
性质:
1. 每个节点不是红色就是黑色
2. 不可能有连在一起的红色
3. 根节点就黑色(入度为0的节点)
4. 每个红色节点的两个子节点都是黑色. 叶子节点都是黑色(出度为0)

规则: 所有插入的节点默认就是红色

变色: 当前节点(插入节点)的叔,父节点都是红色
  (1) 把叔父节点为黑色
  (2) 祖变红
  (3) 原当前节点的祖节点成为新的当前节点

左旋: 若当前节点父红叔黑,且当前节点是右子树时,左旋, 以父结节为支点左旋

右旋: 若当前节点父红叔黑,且当前节点是左子树时,右旋
  (1) 把父节点变为黑色
  (2) 把祖父节点变为红色
  (3) 以祖父节点旋转

 

左旋右旋规律总结(以当前节点为基准): 父干爷死,兄弟靠爷,左旋右靠,右旋左靠

 

请看示例

10    20   30   5  15   3   8  再插入6

图2中, 0006与0008都是红色与性质2矛盾,所以必然会变色

 

图3中0005与0010都是红色,与性质2矛盾,且0005节点父红叔黑,且处于0010的左子树上,所以右旋

     

 

 

 

 

以上就是红黑树一个右旋示例

分析工具: https://www.cs.usfca.edu/~galles/visualization/RedBlack.html

补充:

 

 

修订版1:

还是举例子说明, 依次添加数据,然后分析每一次旋转变色后的逻辑 

插入50,60,70

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

posted on   显示账号  阅读(195)  评论(0编辑  收藏  举报
编辑推荐:
· 深入理解 Mybatis 分库分表执行原理
· 如何打造一个高并发系统?
· .NET Core GC压缩(compact_phase)底层原理浅谈
· 现代计算机视觉入门之:什么是图片特征编码
· .NET 9 new features-C#13新的锁类型和语义
阅读排行:
· 手把手教你在本地部署DeepSeek R1,搭建web-ui ,建议收藏!
· Spring AI + Ollama 实现 deepseek-r1 的API服务和调用
· 《HelloGitHub》第 106 期
· 数据库服务器 SQL Server 版本升级公告
· C#/.NET/.NET Core技术前沿周刊 | 第 23 期(2025年1.20-1.26)
点击右上角即可分享
微信分享提示