红黑树的理解

在这里插入图片描述
红黑树特点:

  1. 每个节点非红即黑;
  2. 根节点总是黑色的;
  3. 每个叶子节点都是黑色的空节点(NIL节点);
  4. 如果节点是红色的,则它的子节点必须是黑色的(反之不一定);
  5. 从根节点到叶节点或空子节点的每条路径,必须包含相同数目的黑色节点(即相同的黑色高度)

红黑树的应用:
TreeMap、TreeSet以及JDK1.8之后的HashMap底层都用到了红黑树。

为什么要用红黑树
简单来说红黑树就是为了解决二叉查找树的缺陷,因为二叉查找树在某些情况下会退化成一个线性结构。

红黑树属于(自)平衡二叉树,但是为了保持“平衡”是需要付出代价的,红黑树在插入新数据后可能需要通过左旋,右旋、变色这些操作来保持平衡,如果链表长度很短的话,根本不需要引入红黑树的,引入之后还要付出代价维持它的平衡。但是
链表过长就不一样了。至于为什么选 8 这个值呢?通过概率统计所得,这个值是综合查询成本和新增元素成本得出的最好的一个值。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
红黑树的删除操作需要进行调整,以保证删除节点后仍然满足红黑树的性质。删除操作涉及到三种情况: 1. 删除节点没有子节点 这种情况比较简单,只需要将待删除节点替换成空节点,并将其颜色设为色即可。如果待删除节点是红色节点,那么删除后不会影响红黑树的性质;如果待删除节点节点,那么删除后会破坏红黑树的性质,需要进行调整。 2. 删除节点只有一个子节点 这种情况需要将待删除节点的子节点替换成待删除节点,并将待删除节点的颜色赋给子节点。如果待删除节点节点,那么删除后会破坏红黑树的性质,需要进行调整。 3. 删除节点有两个子节点 这种情况比较复杂,需要找到待删除节点的后继节点,将后继节点的值赋给待删除节点,并将后继节点删除。后继节点要么是待删除节点的右子树中的最小节点,要么是待删除节点的左子树中的最大节点。删除后继节点可能会破坏红黑树的性质,需要进行调整。 下面是红黑树删除的具体调整操作: 1. 如果删除的节点是红色节点,那么删除后不会破坏红黑树的性质,直接删除即可。 2. 如果删除的节点节点,并且其子节点是红色节点,那么可以将子节点代替删除节点,并不会破坏红黑树的性质。 3. 如果删除的节点节点,并且其子节点都是节点,那么需要进行调整。设待删除节点为x,x的兄弟节点为s,x的父节点为p。此时需要分为以下三种情况: (1) x是左子节点,s是右子节点 此时需要进行左旋操作。将p作为新的子树根节点,s作为p的左子节点,x的兄弟节点s的右子节点作为s的左子节点。 (2) x是右子节点,s是左子节点 此时需要进行右旋操作。将p作为新的子树根节点,s作为p的右子节点,x的兄弟节点s的左子节点作为s的右子节点。 (3) x是左子节点,s是左子节点或者x是右子节点,s是右子节点 此时需要进行重新着色操作。将x的兄弟节点s的颜色涂成红色,将x的父节点p的颜色设为色,删除节点x。 最后,需要检查删除节点红黑树的性质是否仍然满足,如果不满足需要进行相应的调整操作。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值