数据结构-红黑树

二叉搜索树

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

最佳时间复杂度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时候变成红黑树而不是自平衡二叉树或二叉搜索树?

相关推荐
想要成为糕糕手5 小时前
前端必修课:JavaScript 数组与数据结构底层逻辑全解析
javascript·数据结构·面试
tyung7 小时前
Go 手写 Wait-Free SPSC 无界队列:无 CAS、无锁、泛型节点池
数据结构·后端·go
Chen_harmony8 小时前
一、数据结构概念和复杂度计算
数据结构
小欣加油8 小时前
leetcode287寻找重复数
数据结构·c++·算法·leetcode
fie888910 小时前
LBP + HOG 特征检测与识别 MATLAB 实现
数据结构·算法·matlab
退休倒计时11 小时前
【每日一题】LeetCode 15. 三数之和 TypeScript
数据结构·算法·leetcode·typescript
AbandonForce11 小时前
滑动窗口:定长滑动窗口与不定长滑动窗口
数据结构·c++·算法
炸薯条!12 小时前
二叉树的链式表示(2)
java·数据结构·算法
YHHLAI12 小时前
JavaScript 数据结构精讲:数组底层与实战避坑
开发语言·javascript·数据结构
Coder-magician12 小时前
《代码随想录》刷题打卡day12:二叉树part02
数据结构·c++·算法