红黑树基础理解

一、数据结构

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



相关推荐
lizhou8284 分钟前
win10下使用docker、k8s部署java应用
java·docker·kubernetes
知识分享小能手5 分钟前
mysql学习教程,从入门到精通,SQL ORDER BY 子句(14)
大数据·开发语言·数据库·sql·学习·mysql·大数据开发
lkasi27 分钟前
python文字转wav音频
开发语言·python
白茶等风1213837 分钟前
C#_封装详解
开发语言·c#
程序员阿鹏1 小时前
ArrayList 与 LinkedList 的区别?
java·开发语言·后端·eclipse·intellij-idea
18你磊哥1 小时前
java重点学习-JVM类加载器+垃圾回收
java·jvm
聂 可 以1 小时前
在SpringBoot项目中利用Redission实现布隆过滤器(布隆过滤器的应用场景、布隆过滤器误判的情况、与位图相关的操作)
java·spring boot·redis
长安初雪1 小时前
Java客户端SpringDataRedis(RedisTemplate使用)
java·redis
繁依Fanyi1 小时前
使用 Spring Boot + Redis + Vue 实现动态路由加载页面
开发语言·vue.js·pytorch·spring boot·redis·python·算法
aloha_7891 小时前
B站宋红康JAVA基础视频教程(chapter14数据结构与集合源码)
java·数据结构·spring boot·算法·spring cloud·mybatis