红黑树基础理解

一、数据结构

1.数组

a.内存地址连续,使用之前必须要指定数组长度

b.可以通过下标访问的方式访问成员,查询效率高

c.增删操作会带来性能消耗效率相对差点(要防止数据下标越界的问题,需要动态扩容)

2.链表 :单向链表,双向链表LinkedList

a.灵活的空间要求,存储空间不要求连续

b.不支持下标访问,支持顺序遍历搜索

c.针对增删操作找到对应的节点改变链表的头尾指向即可,无需移动元素存储位置。

**3.树 :**只有一个root节点,最底层为叶子节点

二叉树:也可能存在不平衡二叉树

a.某节点的左子树节点值仅包含小于该节点值

b.某节点的右子树节点值仅包含大于该节点值

c.左右子树每个也必须是二叉查找树

d.顺序排列

红黑树【RBT】: 自平衡(不是绝对)的二叉查找树

1.每个节点要么是红色,要么是黑色

2.根节点必须是黑色

3.每个叶子节点【NIL】是黑色(自己会维护,空的叶子节点)

4.每个红色节点的两个子节点一定都是黑色,(相邻个节点不会是一样的红色)是黑色,(相邻个节点不会是一样的红色)

5.任意节点到每个叶子节点的路径包含相同数量的黑节点【是一个黑平衡二叉树】

6.通过 recolor 重新标识节点为红色或者黑色 以及 rotation旋转 树达到平衡

红黑树的插入场景:【7种】

A.红黑树为空的情况,插入进去,即为根节点,黑色

B.插入节点的父节点为黑色节点,直接将红色节点插入即可

C.插入节点的父节点为红色节点

c.1 叔叔节点存在且为红色节点

c.2 叔叔节点不存在或为黑色

c.2.1 父节点是祖父节点的左节点

c.2.1-1 插入节点是P的左节点

c.2.1-2 插入节点是P的右节点

c.2.2 父节点是祖父节点的右节点

c.2.2-1 插入节点是P的右节点

c.2.2-2 插入节点是P的左节点



相关推荐
维吉斯蔡21 分钟前
【VS Code / Cursor】文件夹右键快捷打开与文件类型自动关联
开发语言·程序人生·学习方法
蓝斯49735 分钟前
[原创]《C#高级GDI+实战:从零开发一个流程图》第章:增加贝塞尔曲线,上、下、左、右连接点
java·c#·流程图
前端工作日常1 小时前
我学习到的Java 的 Service 分层:itf 和 impl 到底是什么?
java·后端
都叫我大帅哥2 小时前
Spring @Transactional 注解完全指南
java·spring
Java成神之路-2 小时前
G1 垃圾回收器 :SATB + TAMS核心机制深度解析
java·jvm
前端工作日常2 小时前
我学习到的JIT即时编译与机器码缓存失效
java·后端
带刺的坐椅2 小时前
Solon 的 10 种 HTTP 服务器:改一行依赖,换一个引擎
java·solon·jetty·undertow·mcp-server·htttp
luj_17682 小时前
星火科技助力边远地区防病攻坚
c语言·开发语言·c++·经验分享·算法
always_TT3 小时前
【Python 日志记录:logging 模块入门】
开发语言·python·php
xcLeigh3 小时前
Go入门:变量声明的五种方式详解
java·开发语言·golang