update rb tree

This commit is contained in:
冉文杰
2021-10-16 01:52:41 +08:00
parent 30c899160d
commit ae3a9ca588
4 changed files with 22 additions and 8 deletions
+2 -3
View File
@@ -1,7 +1,6 @@
# B树
## B树
平衡查找树,一种多路查找树。
一种多路平衡查找树。
能保证数据插入和删除情况下,任然保持执行效率。
+15 -1
View File
@@ -7,6 +7,7 @@
### 应用场景
* C++ STL的map和set
* java 中 HashMap、TreeMap 的底层实现,当HashMap中元素大于8个时,HashMap底层存储实现改为红黑树,以提高元素搜索速度。
关于 HashMap 实现解析参考 [这里](../../3%20HashTable/HashMap%20in%20Java.md)
* 广泛应用Linux 的进程管理、内存管理,设备驱动及虚拟内存跟踪
@@ -26,12 +27,25 @@
在每个节点增加一个存储位表示节点的颜色,可以是红或黑(非红即黑);通过对任何一条从根到叶子的路径上各个节点着色的方式的限制,红黑树确保没有一条路径会比其它路径长出两倍;
因此,红黑树是一种弱平衡二叉树(由于是弱平衡,可以看到,在相同的节点情况下,AVL树的高度低于红黑树)。相对于要求严格的AVL树来说,它的旋转次数少,所以对于搜索,插入,删除操作较多的情况下,我们就用红黑树。
因此,红黑树是一种弱平衡二叉树(由于是弱平衡,可以看到,在相同的节点情况下,AVL树的高度低于红黑树)。相对于要求严格的[AVL树](../3-平衡树AVL/README.md)来说,它的旋转次数少,所以对于搜索,插入,删除操作较多的情况下,我们就用红黑树。
也就是说,红黑树牺牲掉一定的平衡性(牺牲查找性能),换来了 插入,删除操作时 更少的旋转次数带来的开销。
### 红黑树 & B+ 树对比
* 红黑树多用在内部排序,即全放在内存中的
* B+树多用于外存上时,B+也被成为一个磁盘友好的数据结构; 这也是为什么 mysql索引使用b+树而不使用红黑树
为什么使用 红黑树 而不是 B+ 树呢?原因如下:
* 没有范围查找, 不需要 B+
* 不需要多路平衡树,使用二路平衡,实现简单,且红黑树能兼顾 查找,删除操作的性能
-1
View File
@@ -1,6 +1,5 @@
# 反向索引
正排索引如 mysql中的索引实现 ,通常使用 B+ 树实现。 反向索引如何来实现呢?
### 应用场景
+5 -3
View File
@@ -5,13 +5,13 @@
* 二叉树
* 二叉查找树
* AVL树
* 红黑树
* B树 : B树, B+树(mysql索引使用B+树的数据结构)
* 字典树trie(前缀树,单词查找树)
* 伸展树
* 后缀树
* B树 : B树, B+树(mysql索引使用B+树的数据结构)
* 红黑树
* 二叉堆(优先队列)
* 红黑树
* Treap 树
* 赫夫曼编码 Huffman
@@ -24,6 +24,9 @@
## [AVL树](3-平衡树AVL/README.md)
## [红黑树](9-红黑树%20R-B%20tree/红黑树.md)
## [字典树trie](4-字典树Trie/README.md)
字典树也叫前缀树,单词查找树
@@ -43,7 +46,6 @@
## [二叉堆](8-堆/堆.md)
## [红黑树](9-红黑树%20R-B%20tree/红黑树.md)
## 赫夫曼编码 Huffman