AOP-Chap27-Balanced BSTs

本文介绍了AVL树的插入与删除操作,以及红黑树的插入和删除原理。AVL树保证节点高度差不超过1,通过旋转保持平衡。红黑树则确保从根到叶的最长路径不超过最短路径的两倍,维持颜色规则以平衡树。删除节点时,红色节点可以直接删除,黑色节点删除则需重新调整树的平衡。
摘要由CSDN通过智能技术生成

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/
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值