Chap27 Balanced BSTs

  • 1 AVL Insertion
  • 2 AVL Delete
  • 3 Red-Black Insert
  • 4 Red-Black Delete

1 AVL Insertion

  • 对于每个node,其子节点的高度最多差1,为balance
  • 先正常插入并记录每个node的高度,如果违法,则通过一次旋转,保持树的高度为lg(N)


    rotating left
  • single rotations




  • double rotation --> 如果不平衡是由右子树的左子树(或左子树的右子树)的生长引起









2 AVL Delete



3 Red-Black Insert

  • 从根到叶的路径的最大长度是O(lg(N)),但不平衡
  • 红黑树
    1. 每个结点的颜色不是红色就是黑色
    2. 根是黑色的
    3. 如果一个节点是红色的,它的子节点必须是黑色的
    4. 从root到NULL的每条路径必须有相同数量的黑节点
  • 最长路径最多是最短路径的两倍
  • 通常认为NULL节点是黑色的(而不是作为一个独立的“非节点”实体)
  • 当添加到红黑树时,所添加的节点必须是红色的;新节点的父节点必须是黑色
  • 当沿树向下遍历时,检查当前节点是否是一个带有两个红色子节点的黑节点(任何带有红色子节点的节点都必须是黑的)。如果两个子节点都为红色,则将当前节点重新设置为红色,将子节点重新设置为黑色
  • 如果当前节点的父节点是红色的,那么会在一行中引入了两个红色节点,此时通过旋转和重新着色节点来修复它
  • 如果根被染成红色,直接换为黑色
  • 注意10的左子结点是黑色,且永远只可能是黑色










4 Red-Black Delete

  • 如果树中删除的节点是红色的,直接删除
  • 删黑色点,需要重新着色和旋转
  • Matt Might方法引入double black(+2个黑节点) 和 negative black(-1个黑节点),首先在删除站点“双黑”(回想一下:NULL节点通常被视为黑色)临时着色NULL节点,这将维护黑色计数,尽管必须删除“双黑”节点才能调用进程完成
    http://matt.might.net/articles/red-black-delete/

AOP-Chap27-Balanced BSTs相关推荐

  1. 多核时代,并行编程为何“臭名昭著”?

    作者 | Yan Gu 来源 | 转载自知乎用户Yan Gu [导读]随着计算机技术的发展,毫无疑问现代计算机的处理速度和计算能力也越来越强.然而细心的同学们可能早已注意到,从2005年起,单核的 C ...

  2. 简单两步,spring aop上手即用即会

    面向切面思想在于它的干净,对逻辑代码没有任何侵入性,只需要在想要切入的方法或者类之上加上自定义的注解即可. 首先,就是自定义一个注解: //这里我们定义一个名为 @MyPointer 的注解 @Doc ...

  3. Spring AOP + Redis解决重复提交的问题

    Spring AOP + Redis解决重复提交的问题 用户在点击操作的时候,可能会连续点击多次,虽然前端可以通过设置按钮的disable的属性来控制按钮不可连续点击,但是如果别人拿到请求进行模拟,依 ...

  4. 【Spring】面向切面编程AOP

    AOP基础 什么是AOP [废话解释]在软件业,AOP全称Aspect Oriented Programming 即:面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术.AO ...

  5. SpringBoot集成AOP管理日志

    写在前面 如何将所有的通过url的请求参数以及返回结果都输出到日志中? 如果在controller的类中每个方法名都写一个log输出肯定是不明智的选择.使用Spring的AOP功能即可完成. AOP ...

  6. 利用Spring AOP与JAVA注解为系统增加日志功能

    Spring AOP一直是Spring的一个比较有特色的功能,利用它可以在现有的代码的任何地方,嵌入我们所想的逻辑功能,并且不需要改变我们现有的代码结构. 鉴于此,现在的系统已经完成了所有的功能的开发 ...

  7. Spring.Net Aop

    Spring.Net 有四种通知: IMethodBeforeAdvice,IAfterReturningAdvice,IMethodInterceptor,IThrowsAdvice BeforeA ...

  8. Spring AOP的一些概念

            切面(Aspect): 一个关注点的模块化,这个关注点可能会横切多个对象.事务管理是J2EE应用中一个关于横切关注点的很好的例子. 在Spring AOP中,切面可以使用通用类(基于模 ...

  9. (一)七种AOP实现方法

    在这里列表了我想到的在你的应用程序中加入AOP支持的所有方法.这里最主要的焦点是拦截,因为一旦有了拦截其它的事情都是细节. Approach 方法 Advantages 优点 Disadvantage ...

  10. Spring框架系列之AOP思想

    微信公众号:compassblog 欢迎关注.转发,互相学习,共同进步! 有任何问题,请后台留言联系! 1.AOP概述 (1).什么是 AOP AOP 为 Aspect Oriented Progra ...

最新文章

  1. 菜鸟要做架构师(一)——如何快速开发中小型系统
  2. Android 可视化界面编辑器无法显示界面问题的终极解决方案
  3. 高级数据结构与算法 | 回溯算法(Back Tracking Method)
  4. Element Select下拉框 选中后视图没有渲染等问题
  5. 【caffe-matlab】权重以及特征图的可视化
  6. 把输入字符的小写转换成大写并输出
  7. MySQL日常应用操作记录
  8. java 课程设计数据库_人事管理系统(java数据库课程设计)+SQL数据库
  9. ERP项目实施记录06
  10. 微服务的隔离和熔断机制
  11. 今天主要改了罗宾钢琴的首页图片缩放问题
  12. comsol 4.4 matlab,如何使用COMSOL with MATLAB的清单
  13. html过滤检索类似excel,利用jQuery实现仿Excel表格排序筛选代码
  14. Javascript 如何实现继承?
  15. 2022年618蓝牙耳机选什么牌子好?618性价比高的蓝牙耳机推荐
  16. 大写金额换算器iOS版源代码
  17. C# 提取Word文档中的图片
  18. 关于UnityHub下载 Android NDK/SDK 失败的解决方式
  19. 努力学Java挣小钱钱
  20. 求职 个人简历 手机软件开发工程师

热门文章

  1. IndentationError: expected an indented block
  2. 高速服务器充电桩位置,最全高速服务区充电站汇总,再也不担心过年回家趴半路啦!...
  3. C/C++利用netsh设置动态IP和静态IP
  4. 体渲染-------颜色、不透明度调整
  5. 抓取手机端app日志的方法总结
  6. AcWing 4487. 最长连续子序列 单调栈上二分 数组模拟栈的好处
  7. 开机自启动——修改注册表
  8. python中class什么意思_python中的class是什么意思
  9. 国内最知名的PHP开源网站管理系统,国内最强十款开源网站管理系统
  10. AppStore SDK