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. REDIS的几个测试结果
  2. UART, SPI, IIC的详解及三者的区别和联系
  3. Java高阶部分知识点汇总(二)-封装与隐藏详讲
  4. NO.111 禅道导出数据做透视表,让你轻松做年终工作总结。
  5. Dubbo实现原理之基于SPI思想实现Dubbo内核
  6. 轻量级的日期时间控件Pikaday
  7. EXCEL在公司管理中的典型应用
  8. 尝试修改源码需要用到git存一下
  9. java启动密码,java - 用户验证密码后如何启动java applet程序? - SO中文参考 - www.soinside.com...
  10. 运行项目到 微信开发者工具和浏览器
  11. 2014 Multi-University Training Contest 1 — D. Task
  12. CRC-16的原理和实现
  13. Wi-FiR CC3000 模块
  14. html5页面资源预加载(Link prefetch)
  15. Js字符串与十六进制的相互转换 【转】
  16. 油田生产数据选取进展22.2.11——2.17——2.26
  17. 机械寿命预测,多步预测
  18. 中国自由软件推广先锋的自述,心潮澎湃的一往无前,一定要看!作者:洪峰...
  19. 通过银行卡号获取银行卡所属银行
  20. 查看数据库信息(一)

热门文章

  1. 行业点评:有赞996事件,要感恩程序员的加班
  2. arctanx麦克劳林公式推导过程_高中数学三角函数公式大全,竞赛高考都适用(含公式推导)...
  3. 二级域名间相互请求 ajax跨域请求
  4. 安卓端airplay实现IOS屏幕镜像
  5. AE无法输出h.264 安装Quick time也不好使的办法 本人使用 AE CC2019
  6. redis集群报错(error) CLUSTERDOWN Hash slot not served
  7. 9011,9012,9013,9014,8050,8550三极管的区别
  8. iOS设置App的名称和简单的版本国际化与本地化
  9. 克隆巴赫系数 Cronbach‘s alpha 及 R, Python 实现
  10. Ubuntu18.04 (WSL) 编译RK3399 Android8.1源码