【数据结构】红黑树

概述RBT,RedBlackTree应用场景在JDK1.8的HashMap中,为了解决过度哈希冲突带来的长链表,会将链表转为红黑树;Linux底层的CFS进程调度算法中,vruntime利用红黑树来进行存储;多路复用技术的Epoll的核心结构也是红黑树+双向链表。定义非红即黑根节点必为黑所有叶子节点必为黑任意节点到叶子节点所经过的黑节点的数目相同不会有连续的红节点旋转#mermaid-svg-KPVwHSAB6d3u1hR3 .label{font-family:'trebuche
摘要由CSDN通过智能技术生成

概述

RBT,RedBlackTree

应用场景

在JDK1.8的HashMap中,为了解决过度哈希冲突带来的长链表,会将链表转为红黑树;Linux底层的CFS进程调度算法中,vruntime利用红黑树来进行存储;多路复用技术的Epoll的核心结构也是红黑树+双向链表。

性质

  1. 每个节点或是红色的,或是黑色的。
  2. 根节点是黑色的。
  3. 每个叶子节点(NIL)是黑色的。
  4. 如果一个节点是红色的,则它的两个子节点都是黑色的。
  5. 对每个节点,从该节点到其所有后代叶节点的简单路径上,均包含相同数目的黑色节点。

引理

一棵有n个内部节点的红黑树的高度至多为 2 lg ⁡ ( n + 1 ) 2\lg(n+1) 2lg(n+1)

证明

当节点都为黑色时,该树的节点数最少。
若bh(black-height)为黑高,则用归纳法:

  • bh=0时n=0
(NIL)
  • bh=1时n=1
x
NIL
NIL
  • bh=2时n=3
x
n
n
NIL
NIL
NIL
NIL
  • bh=3时n=7
x
n
n
n
n
n
n
NIL
NIL
NIL
NIL
NIL
NIL
NIL
NIL

因此,以x为根的子树至少包含 2 b h ( x ) − 1 2^{bh(x)}-1 2bh(x)1个内部结点。
设h为树的高度,则根据性质4,从根到叶节点(不包括根节点)的任何一条简单路径上都至少有一半的节点为黑色,所以根的黑高至少为 h 2 \frac h2 2h,于是有 n ≥ 2 h 2 − 1 n\ge2^{\frac h2}-1 n22h1,即 h ≤ 2 log ⁡ 2 ( n + 1 ) h\le2\log_2(n+1) h2log2(n+1)

旋转

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值