@@ -98,87 +98,99 @@ Set 继承于 Collection 接口,是一个不允许出现重复元素,并且
98
98
- [ ConcurrentHashMap 实现原理及源码分析] ( https://link.juejin.im/?target=http%3A%2F%2Fwww.cnblogs.com%2Fchengxiao%2Fp%2F6842045.html )
99
99
100
100
## 树
101
- * ### 1 二叉树
102
-
103
- [ 二叉树] ( https://baike.baidu.com/item/%E4%BA%8C%E5%8F%89%E6%A0%91 ) (百度百科)
104
101
105
- (1)[ 完全二叉树] ( https://baike.baidu.com/item/%E5%AE%8C%E5%85%A8%E4%BA%8C%E5%8F%89%E6%A0%91 ) ——若设二叉树的高度为h,除第 h 层外,其它各层 (1~h-1) 的结点数都达到最大个数,第h层有叶子结点,并且叶子结点都是从左到右依次排布,这就是完全二叉树。
106
-
107
- (2)[ 满二叉树] ( https://baike.baidu.com/item/%E6%BB%A1%E4%BA%8C%E5%8F%89%E6%A0%91 ) ——除了叶结点外每一个结点都有左右子叶且叶子结点都处在最底层的二叉树。
108
-
109
- (3)[ 平衡二叉树] ( https://baike.baidu.com/item/%E5%B9%B3%E8%A1%A1%E4%BA%8C%E5%8F%89%E6%A0%91/10421057 ) ——平衡二叉树又被称为AVL树(区别于AVL算法),它是一棵二叉排序树,且具有以下性质:它是一棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。
102
+ ### 1 二叉树
110
103
111
- * ### 2 完全二叉树
104
+ [ 二叉树 ] ( https://baike.baidu.com/item/%E4%BA%8C%E5%8F%89%E6%A0%91 ) (百度百科)
112
105
113
- [ 完全二叉树] ( https://baike.baidu.com/item/%E5%AE%8C%E5%85%A8%E4%BA%8C%E5%8F%89%E6%A0%91 ) (百度百科)
106
+ (1) [ 完全二叉树] ( https://baike.baidu.com/item/%E5%AE%8C%E5%85%A8%E4%BA%8C%E5%8F%89%E6%A0%91 ) ——若设二叉树的高度为h,除第 h 层外,其它各层 (1~h-1) 的结点数都达到最大个数,第h层有叶子结点,并且叶子结点都是从左到右依次排布,这就是完全二叉树。
114
107
115
- 完全二叉树:叶节点只能出现在最下层和次下层,并且最下面一层的结点都集中在该层最左边的若干位置的二叉树。
116
- * ### 3 满二叉树
108
+ (2)[ 满二叉树] ( https://baike.baidu.com/item/%E6%BB%A1%E4%BA%8C%E5%8F%89%E6%A0%91 ) ——除了叶结点外每一个结点都有左右子叶且叶子结点都处在最底层的二叉树。
117
109
118
- [ 满二叉树 ] ( https://baike.baidu.com/item/%E6%BB% A1%E4%BA%8C%E5%8F%89%E6%A0%91 ) (百度百科,国内外的定义不同)
110
+ (3) [ 平衡二叉树 ] ( https://baike.baidu.com/item/%E5%B9%B3%E8% A1%A1% E4%BA%8C%E5%8F%89%E6%A0%91/10421057 ) ——平衡二叉树又被称为AVL树(区别于AVL算法),它是一棵二叉排序树,且具有以下性质:它是一棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。
119
111
120
- 国内教程定义:一个二叉树,如果每一个层的结点数都达到最大值,则这个二叉树就是满二叉树。也就是说,如果一个二叉树的层数为K,且结点总数是(2^k) -1 ,则它就是满二叉树。
121
- * ### 堆
122
-
123
- [ 数据结构之堆的定义] ( https://blog.csdn.net/qq_33186366/article/details/51876191 )
112
+ ### 2 完全二叉树
124
113
125
- 堆是具有以下性质的完全二叉树:每个结点的值都大于或等于其左右孩子结点的值,称为大顶堆;或者每个结点的值都小于或等于其左右孩子结点的值,称为小顶堆。
126
- * ### 4 二叉查找树(BST)
114
+ [ 完全二叉树] ( https://baike.baidu.com/item/%E5%AE%8C%E5%85%A8%E4%BA%8C%E5%8F%89%E6%A0%91 ) (百度百科)
127
115
128
- [ 浅谈算法和数据结构: 七 二叉查找树 ] ( http://www.cnblogs.com/yangecnu/p/Introduce-Binary-Search-Tree.html )
116
+ 完全二叉树:叶节点只能出现在最下层和次下层,并且最下面一层的结点都集中在该层最左边的若干位置的二叉树。
129
117
130
- 二叉查找树的特点:
118
+ ### 3 满二叉树
131
119
132
- 1 . 若任意节点的左子树不空,则左子树上所有结点的 值均小于它的根结点的值;
133
- 2 . 若任意节点的右子树不空,则右子树上所有结点的值均大于它的根结点的值;
134
- 3 . 任意节点的左、右子树也分别为二叉查找树;
135
- 4 . 没有键值相等的节点(no duplicate nodes)。
120
+ [ 满二叉树] ( https://baike.baidu.com/item/%E6%BB%A1%E4%BA%8C%E5%8F%89%E6%A0%91 ) (百度百科,国内外的定义不同)
136
121
137
- * ### 5 平衡二叉树(Self-balancing binary search tree)
138
-
139
- [ 平衡二叉树] ( https://baike.baidu.com/item/%E5%B9%B3%E8%A1%A1%E4%BA%8C%E5%8F%89%E6%A0%91 ) (百度百科,平衡二叉树的常用实现方法有红黑树、AVL、替罪羊树、Treap、伸展树等)
140
- * ### 6 红黑树
141
-
142
- - 红黑树特点:
143
- 1 . 每个节点非红即黑;
144
- 2 . 根节点总是黑色的;
145
- 3 . 每个叶子节点都是黑色的空节点(NIL节点);
146
- 4 . 如果节点是红色的,则它的子节点必须是黑色的(反之不一定);
147
- 5 . 从根节点到叶节点或空子节点的每条路径,必须包含相同数目的黑色节点(即相同的黑色高度)。
148
-
149
- - 红黑树的应用:
122
+ 国内教程定义:一个二叉树,如果每一个层的结点数都达到最大值,则这个二叉树就是满二叉树。也就是说,如果一个二叉树的层数为K,且结点总数是(2^k) -1 ,则它就是满二叉树。
123
+
124
+ ### 堆
125
+
126
+ [ 数据结构之堆的定义] ( https://blog.csdn.net/qq_33186366/article/details/51876191 )
127
+
128
+ 堆是具有以下性质的完全二叉树:每个结点的值都大于或等于其左右孩子结点的值,称为大顶堆;或者每个结点的值都小于或等于其左右孩子结点的值,称为小顶堆。
129
+
130
+ ### 4 二叉查找树(BST)
131
+
132
+ [ 浅谈算法和数据结构: 七 二叉查找树] ( http://www.cnblogs.com/yangecnu/p/Introduce-Binary-Search-Tree.html )
133
+
134
+ 二叉查找树的特点:
135
+
136
+ 1 . 若任意节点的左子树不空,则左子树上所有结点的 值均小于它的根结点的值;
137
+ 2 . 若任意节点的右子树不空,则右子树上所有结点的值均大于它的根结点的值;
138
+ 3 . 任意节点的左、右子树也分别为二叉查找树;
139
+ 4 . 没有键值相等的节点(no duplicate nodes)。
140
+
141
+ ### 5 平衡二叉树(Self-balancing binary search tree)
142
+
143
+ [ 平衡二叉树] ( https://baike.baidu.com/item/%E5%B9%B3%E8%A1%A1%E4%BA%8C%E5%8F%89%E6%A0%91 ) (百度百科,平衡二叉树的常用实现方法有红黑树、AVL、替罪羊树、Treap、伸展树等)
144
+
145
+ ### 6 红黑树
146
+
147
+ 红黑树特点:
148
+
149
+ 1 . 每个节点非红即黑;
150
+ 2 . 根节点总是黑色的;
151
+ 3 . 每个叶子节点都是黑色的空节点(NIL节点);
152
+ 4 . 如果节点是红色的,则它的子节点必须是黑色的(反之不一定);
153
+ 5 . 从根节点到叶节点或空子节点的每条路径,必须包含相同数目的黑色节点(即相同的黑色高度)。
154
+
155
+
156
+ 红黑树的应用:
150
157
151
- TreeMap、TreeSet以及JDK1.8之后的HashMap底层都用到了红黑树。
158
+ TreeMap、TreeSet以及JDK1.8之后的HashMap底层都用到了红黑树。
152
159
153
- - 为什么要用红黑树
160
+ ** 为什么要用红黑树? **
154
161
155
- 简单来说红黑树就是为了解决二叉查找树的缺陷,因为二叉查找树在某些情况下会退化成一个线性结构。详细了解可以查看 [ 漫画:什么是红黑树?] ( https://juejin.im/post/5a27c6946fb9a04509096248#comment ) (也介绍到了二叉查找树,非常推荐)
162
+
163
+ 简单来说红黑树就是为了解决二叉查找树的缺陷,因为二叉查找树在某些情况下会退化成一个线性结构。详细了解可以查看 [ 漫画:什么是红黑树?] ( https://juejin.im/post/5a27c6946fb9a04509096248#comment ) (也介绍到了二叉查找树,非常推荐)
156
164
157
- - 推荐文章:
158
- - [ 漫画:什么是红黑树?] ( https://juejin.im/post/5a27c6946fb9a04509096248#comment ) (也介绍到了二叉查找树,非常推荐)
159
- - [ 寻找红黑树的操作手册] ( http://dandanlove.com/2018/03/18/red-black-tree/ ) (文章排版以及思路真的不错)
160
- - [ 红黑树深入剖析及Java实现] ( https://zhuanlan.zhihu.com/p/24367771 ) (美团点评技术团队)
161
- * ### 7 B-,B+,B* 树
162
-
163
- [ 二叉树学习笔记之B树、B+树、B* 树 ] ( https://yq.aliyun.com/articles/38345 )
164
-
165
- [ 《B-树,B+树,B* 树详解》] ( https://blog.csdn.net/aqzwss/article/details/53074186 )
166
-
167
- [ 《B-树,B+树与B* 树的优缺点比较》] ( https://blog.csdn.net/bigtree_3721/article/details/73632405 )
168
-
169
- B-树(或B树)是一种平衡的多路查找(又称排序)树,在文件系统中有所应用。主要用作文件的索引。其中的B就表示平衡(Balance)
170
- 1 . B+ 树的叶子节点链表结构相比于 B- 树便于扫库,和范围检索。
171
- 2 . B+树支持range-query(区间查询)非常方便,而B树不支持。这是数据库选用B+树的最主要原因。
172
- 3 . B\* 树 是B+树的变体,B\* 树分配新结点的概率比B+树要低,空间使用率更高;
173
- * ### 8 LSM 树
165
+ 推荐文章:
166
+
167
+ - [ 漫画:什么是红黑树?] ( https://juejin.im/post/5a27c6946fb9a04509096248#comment ) (也介绍到了二叉查找树,非常推荐)
168
+ - [ 寻找红黑树的操作手册] ( http://dandanlove.com/2018/03/18/red-black-tree/ ) (文章排版以及思路真的不错)
169
+ - [ 红黑树深入剖析及Java实现] ( https://zhuanlan.zhihu.com/p/24367771 ) (美团点评技术团队)
170
+
171
+ ### 7 B-,B+,B* 树
172
+
173
+ [ 二叉树学习笔记之B树、B+树、B* 树 ] ( https://yq.aliyun.com/articles/38345 )
174
+
175
+ [ 《B-树,B+树,B* 树详解》] ( https://blog.csdn.net/aqzwss/article/details/53074186 )
176
+
177
+ [ 《B-树,B+树与B* 树的优缺点比较》] ( https://blog.csdn.net/bigtree_3721/article/details/73632405 )
178
+
179
+ B-树(或B树)是一种平衡的多路查找(又称排序)树,在文件系统中有所应用。主要用作文件的索引。其中的B就表示平衡(Balance)
174
180
175
- [[ HBase] LSM树 VS B+树] ( https://blog.csdn.net/dbanote/article/details/8897599 )
181
+ 1 . B+ 树的叶子节点链表结构相比于 B- 树便于扫库,和范围检索。
182
+ 2 . B+树支持range-query(区间查询)非常方便,而B树不支持。这是数据库选用B+树的最主要原因。
183
+ 3 . B\* 树 是B+树的变体,B\* 树分配新结点的概率比B+树要低,空间使用率更高;
184
+
185
+ ### 8 LSM 树
186
+
187
+ [[ HBase] LSM树 VS B+树] ( https://blog.csdn.net/dbanote/article/details/8897599 )
176
188
177
- B+树最大的性能问题是会产生大量的随机IO
189
+ B+树最大的性能问题是会产生大量的随机IO
178
190
179
- 为了克服B+树的弱点,HBase引入了LSM树的概念,即Log-Structured Merge-Trees。
180
-
181
- [ LSM树由来、设计思想以及应用到HBase的索引] ( http://www.cnblogs.com/yanghuahui/p/3483754.html )
191
+ 为了克服B+树的弱点,HBase引入了LSM树的概念,即Log-Structured Merge-Trees。
192
+
193
+ [ LSM树由来、设计思想以及应用到HBase的索引] ( http://www.cnblogs.com/yanghuahui/p/3483754.html )
182
194
183
195
184
196
## 图
0 commit comments