数据结构 -- 树形查找(三)红黑树

红黑树

为什么要发明红黑树

平衡二叉树AVL:插入/删除很容易破坏平衡性,需要频繁调整树的形态。如:插入操作导致不平衡,则需要先计算平衡因子,找到最小不平衡子树(时间开销大),在进行LL/RR/LR/RL调整

红黑树RBT:插入/删除很多时候不会破坏"红黑"特性,无需频繁调整树的形态。即使需要调整,一般都可以在常数级时间内完成

平衡二叉树:适用于以查为主,很少插入/删除的场景

红黑树:适用于频繁的插入/删除的场景

大概会怎么考?

红黑树的定义和性质 -- 选择题

红黑树的插入/删除 -- 要能手绘插入过程(不太可能考代码),删除操作比较麻烦,也许不考

红黑树的定义和性质

红黑树的定义
c 复制代码
struct RBnode{
    int key;
    RBnode* parent;
    RBnode* lchild;
    RBnode* rchild;
    int color;		//结点颜色,如:可用0/1表示红/黑,也可以使用枚举型enum表示颜色
};

结点的黑高bh -- 从某结点出发(不含该结点)到达任一叶结点的路径上黑节点的总数

红黑树的插入

插入方法

①先查找,确定插入位置(原理同二叉排序树),插入新结点

【与黑高bh相关的推论】

如果根结点的黑高为h,内部结点数(关键字)至少为多少个?

内部结点数最少的情况→总共h层黑结点的满树形态

若根结点黑高为h,内部结点数(关键字)至少有2h-1个

红黑树的删除

重要考点:

①红黑树删除操作的时间复杂度=O(log2n)

②在红黑树中删除结点的处理方式和"二叉排序树的删除'一样

③按②删除结点后,可能破坏"红黑树特性",此时需要调整结点颜色、位置,使其再次满足"红黑树特性"。

相关推荐
Tingjct4 小时前
【初阶数据结构-二叉树】
c语言·开发语言·数据结构·算法
C雨后彩虹4 小时前
计算疫情扩散时间
java·数据结构·算法·华为·面试
飞机和胖和黄4 小时前
考研之王道C语言第三周
c语言·数据结构·考研
达文汐5 小时前
【困难】力扣算法题解析LeetCode332:重新安排行程
java·数据结构·经验分享·算法·leetcode·力扣
一匹电信狗5 小时前
【LeetCode_21】合并两个有序链表
c语言·开发语言·数据结构·c++·算法·leetcode·stl
Gorgous—l5 小时前
数据结构算法学习:LeetCode热题100-多维动态规划篇(不同路径、最小路径和、最长回文子串、最长公共子序列、编辑距离)
数据结构·学习·算法
一条大祥脚6 小时前
26.1.26 扫描线+数论|因子反演+子序列计数|树套树优化最短路
数据结构·算法
李老师讲编程7 小时前
C++信息学奥赛练习题-杨辉三角
数据结构·c++·算法·青少年编程·信息学奥赛
期末考复习中,蓝桥杯都没时间学了7 小时前
力扣刷题13
数据结构·算法·leetcode
多米Domi0117 小时前
0x3f 第48天 面向实习的八股背诵第五天 + 堆一题 背了JUC的题,java.util.Concurrency
开发语言·数据结构·python·算法·leetcode·面试