红黑树基础理解

一、数据结构

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的左节点



相关推荐
CRMEB系统商城3 小时前
CRMEB标准版系统(Java)v3.1正式发布
java·spring·微信小程序·php·教育电商
写后端的胖头鱼3 小时前
【高频面试题】Java 基础类型 + 包装类 + String 互相转换
java·开发语言
weixin_460443563 小时前
企业考试系统从.NET迁移到Java+Linux:数据库迁移、接口兼容与灰度切换实践
java·煤矿培训考试系统·煤矿在线考试系统·煤矿安全培训·煤矿考试系统·一人一档
matlab代码3 小时前
基于matlab自助水果超市水果识别收费系统(GUI界面)【源码67期】
开发语言·matlab
香菜TTT3 小时前
Redis的哨兵机制
java·数据库·redis
hui-梦苑4 小时前
[PHP]轻量主题函数WordPress 集成 KaTeX 数学公式渲染
开发语言·php·wordpress·katex
withoutfear4 小时前
IntelliJ IDEA卡顿内存分配不足和索引被频繁触发问题解决办法
java·ide·intellij-idea
大圣编蚕4 小时前
Java StringWriter 详解:从入门到实战
java·开发语言·python
码行山野赴时序归途4 小时前
C语言预处理指令:编译前的“幕后导演“
c语言·开发语言
golang学习记4 小时前
Go 1.27新特性: json/v2使用有趣指南
开发语言·golang·json