数据结构和算法-红黑树(定义 性质 查找 插入 删除)

文章目录

红黑树的定义和性质

为什么要发明红黑树?

插入和删除即一般不会破坏特性,并且即使破坏,恢复的代价比较低

红黑树怎么考

总览

红黑树的定义

叶节点不是我们认为的没有子树的节点了,是空节点,即我们所认识的叶子节点的孩子就是叶节点

实例:一颗红黑树

练习:是否符合红黑树的要求


将6变为红后

但此时7不满足二叉排序树,替换为11即可

一种可能的出题思路

补充概念:节点黑高

注意不包括出发的节点

红黑树的性质

由于根节点到任意节点的的路径上所含黑节点的数目相同,最短就是全黑嘛,但最长就是有红节点在路径上,由于不存在相邻的红节点这个特性,所以节点树最多的情况就是在黑节点之间有红节点,此时总结点数模至多为全黑节点的两倍

红黑树的查找

和查找平衡二叉树和二叉排序树一样,小于走左子树,大于走右子树

红黑树的插入

实例

非根节点的插入只需关注不红红的这个问题

插入非根节点为红是为了保持黑路同

插入5后发现有红红,此时叔节点为黑,相对爷节点是LL型,此时父节点右旋换爷节点同时变色

插入后红红,此时叔为红,此时叔父爷变色,爷看作新节点,,此时爷节点是根但为红色再变色

此时再插入一个,存在红红,此时叔为黑,且为RR,此时父换爷,同时父和爷变色

此时加入节点,存在红红,且叔为红,此时叔父爷变色,同时将爷看作新加入的节点,发现没破坏红黑树的特性

插入3没啥大问题

插入2,此时红红,同样父换爷,同时染色

此时红叔,叔父爷变色,同时爷看作新节点

插入35

插入25

插入18

插入22

红红,叔为红,叔父爷变色,此时将爷看作新节点,此时存在红红,而该新节点叔为红,所以此时叔父爷都变色,此时的爷看作新节点,但为红节点,所以变黑

插入23,此时红红,叔为黑,且为LR,此时左旋再右旋,最后变色

左旋结果

右旋结果

最后将原来的儿爷节点变色

插入24

红红,此时叔父爷变色,爷看作新节点,存在红红

此时叔为黑,为LR

先左旋

再右旋

原本的儿爷变色

插入19

插入18

此时已经存在18,可以放18的左边也可以放右边

若插入右边

先右旋

再左旋

原本儿爷变色

小结

由根节点到叶节点的最长路径不大于最短路径的两倍可知道左右子树的高度也不过两倍关系

与黑高相关的理论

外部节点就是空节点

根节点黑高为h的红黑树,此时内部节点要最少的话,必须即全黑即可,因为有红的话不能有相邻的。而此时全黑的情况下也是吗,满树,不然达不到从根节点的黑高为h

黑高大于等于h/2是由于如果是一个黑一红那么黑高将大于等于h/2,又由根节点黑高可得出内部节点数最少数量,最后可得出总高度的范围

红黑树的删除

删除方式和二叉排序树一样

只是调整方式不同

相关推荐
好奇龙猫1 小时前
【学习AI-相关路程-mnist手写数字分类-win-硬件:windows-自我学习AI-实验步骤-全连接神经网络(BPnetwork)-操作流程(3) 】
人工智能·算法
sp_fyf_20241 小时前
计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-11-01
人工智能·深度学习·神经网络·算法·机器学习·语言模型·数据挖掘
ChoSeitaku2 小时前
链表交集相关算法题|AB链表公共元素生成链表C|AB链表交集存放于A|连续子序列|相交链表求交点位置(C)
数据结构·考研·链表
偷心编程2 小时前
双向链表专题
数据结构
香菜大丸2 小时前
链表的归并排序
数据结构·算法·链表
jrrz08282 小时前
LeetCode 热题100(七)【链表】(1)
数据结构·c++·算法·leetcode·链表
oliveira-time2 小时前
golang学习2
算法
@小博的博客2 小时前
C++初阶学习第十弹——深入讲解vector的迭代器失效
数据结构·c++·学习
南宫生3 小时前
贪心算法习题其四【力扣】【算法学习day.21】
学习·算法·leetcode·链表·贪心算法
懒惰才能让科技进步4 小时前
从零学习大模型(十二)-----基于梯度的重要性剪枝(Gradient-based Pruning)
人工智能·深度学习·学习·算法·chatgpt·transformer·剪枝