红黑树基础理解

一、数据结构

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



相关推荐
t***5445 小时前
Clang 编译器在 Orwell Dev-C++ 中的局限性
开发语言·c++
OtIo TALL5 小时前
redis7 for windows的安装教程
java
oy_mail5 小时前
QoS质量配置
开发语言·智能路由器·php
oyzz1205 小时前
PHP操作redis
开发语言·redis·php
uNke DEPH6 小时前
Spring Boot的项目结构
java·spring boot·后端
nashane6 小时前
HarmonyOS 6学习:网络能力变化监听与智能提示——告别流量偷跑,打造贴心网络感知应用
开发语言·php·harmony app
xixingzhe26 小时前
idea启动vue项目
java·vue.js·intellij-idea
wzl202612136 小时前
企业微信定时群发技术实现与实操指南(原生接口+工具落地)
java·运维·前端·企业微信
凌波粒6 小时前
Java 8 “新”特性详解:Lambda、函数式接口、Stream、Optional 与方法引用
java·开发语言·idea
曹牧6 小时前
Eclipse:悬停提示(Hover)
java·ide·eclipse