数据结构-红黑树

二叉搜索树

右节点都大于父节点,左节点都小于父节点

最佳时间复杂度O(log n),树的深度是2的n次方

缺点:连续数值容易变成链表

自平衡二叉树

是二叉搜索树的一种

有规则:左右深度相差小于等于1

解决了二叉搜索树的缺点,最差也是O(log n)

但是 自旋耗时

红黑树

是平衡二叉树的一种,不过没有那么严格,红黑树有自己遵循的平衡规则。

红黑树深度最多相差一倍 (红黑树要实现的目标)

规则:

根节点是黑节点

叶子节点(null节点)是黑节点(一半)

红节点的子节点是黑节点(不能两个连续的节点是红节点)

新插入的节点是红节点(但是会有平衡过程的变化)

从任意一个节点出发到子节点的所有路径黑节点数量相同

如果去除红节点就是自平衡二叉树

假设有n个节点

红节点就是nr,黑节点就是nb

n=nr+nb

把红节点去掉就是一个自平衡二叉树。时间复杂度就是O(log nb)。然后把红节点加上,最复杂就是红黑交替 时间复杂度为O(2log nb)nb最差等于n。

常量可以去除,所以时间复杂度就是O(log n)。

红黑树的时间复杂度在不变的情况下简化了插入。所以要优于平衡二叉树。

红黑树的插入规则总结

​​​​​​​X

​​​​​​​

hashmap中为什么在数量大于8时候变成红黑树而不是自平衡二叉树或二叉搜索树?

相关推荐
长安er35 分钟前
LeetCode876/141/142/143 快慢指针应用:链表中间 / 环形 / 重排问题
数据结构·算法·leetcode·链表·双指针·环形链表
workflower1 小时前
PostgreSQL 数据库的典型操作
数据结构·数据库·oracle·数据库开发·时序数据库
仰泳的熊猫1 小时前
1140 Look-and-say Sequence
数据结构·c++·算法·pat考试
EXtreme351 小时前
栈与队列的“跨界”对话:如何用双队列完美模拟栈的LIFO特性?
c语言·数据结构·leetcode·双队列模拟栈·算法思维
松涛和鸣2 小时前
29、Linux进程核心概念与编程实战:fork/getpid全解析
linux·运维·服务器·网络·数据结构·哈希算法
hweiyu002 小时前
数据结构:有向图
数据结构
呱呱巨基2 小时前
C++ 红黑树
数据结构·c++·笔记·学习
不穿格子的程序员2 小时前
从零开始写算法——链表篇:相交链表 + 反转链表
数据结构·算法·链表
仰泳的熊猫2 小时前
1132 Cut Integer
数据结构·c++·算法·pat考试
拼好饭和她皆失3 小时前
高效算法的秘诀:滑动窗口(尺取法)全解析
数据结构·算法·滑动窗口·尺取法