红黑树&二叉树

本文详细介绍了二叉查找树的特性、常见问题,重点剖析了红黑树的特点,包括颜色规则、自平衡操作(左旋、右旋和变色),以及查找、插入和删除流程。通过实例演示,理解红黑树如何解决二叉查找树的不平衡问题,提升搜索效率。
摘要由CSDN通过智能技术生成

了解二叉查找树

二叉树特点

  • 左子树上所有的节点值均小于或等于他的根节点的值
  • 右子树上所有的节点的值均大于或等于他的根节点的值
  • 左右子树也一定分别为二叉排序树
    二叉树

二叉查找树缺点

插入新节点会导致不平衡,可能会导致一边特别长,查询的性能大大折扣,几乎就是线性查找

特殊情况下形成的线性二叉树

红黑树

红黑树特点

符合二叉查找树的特征之外还符合一下性质

  1. 节点颜色为红色或者黑色
  2. 根节点为黑色
  3. 每个叶子的节点都是黑色的空节点(NULL或NIL节点), 称为叶子节点
  4. 每个红色节点的两个子节点都是黑色, 不存在两个连续的红色节点
  5. 从任意节点到其每个叶子的所有路径都包含相同的黑色节点

红黑树
上图中P根节点的左子树比右子树高,但左子树和右子树的黑色节点才层数是相等的,也就是任意一个节点到叶子节点的路径都包含了相同数量的黑色节点(性质5),这种平衡称为黑色完美平衡.

红黑树自平衡操作

左旋

以某个节点作为旋转节点,其右子节点变为旋转节点的父节点,右子节点的左子节点变为旋转节点的右子节点,左子节点保持不变.左旋只影响旋转结点和其右子树的结构,把右子树的结点往左子树挪了。
左旋操作

右旋

以某个节点作为旋转节点,其左子节点变为旋转节点的父节点,左子节点的右子节点变为旋转节点的左子节点,右子节点保持不变.右旋只影响旋转结点和其左子树的结构,把左子树的结点往右子树挪了。

右旋

变色

根据特性将节点颜色红黑变化

红黑树查找流程

  1. 从根节点开始查找,把根节点设置为当前节点
  2. 若当前节点为空,返回null
  3. 若当前节点不为空,用当前节点的key和查询的key比较
  4. 若当前节点key等于查找的key,那么久返回当前节点
  5. 若当前节点key大于查找的key,就把当前节点的左子节点设为当前节点,然后再进行比较
  6. 若当前节点key小于查找的key,就把当前节点的右子节点设为当前节点,然后再进行比较

红黑树查找流程

红黑树插入流程

红黑树插入流程

红黑树删除

  • 情景1:若删除结点无子结点,直接删除
  • 情景2:若删除结点只有一个子结点,用子结点替换删除结点
  • 情景3:若删除结点有两个子结点,用后继结点(大于删除结点的最小结点)替换删除结点
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值