最近为了督促自己学习,搞了个公众号,算是自己平时的学习笔记,以后面试的时候看一看。有兴趣的可以微信搜索序员说公众号,每天花五分钟跟我一起学习,或者发送消息分享下工作、生活的事情也行。扫下面二维码添加公众号啊!!!
平衡二叉查找树(也叫平衡二叉树,AVL树)
特点
-
非叶子节点最多拥有两个子节点
-
非叶子节值大于左边子节点、小于右边子节点
-
树的左右两边的层级数相差不会大于1
-
没有值相等重复的节点
红黑树
自平衡二叉查找树,又叫对称二叉B树
- 节点是红色或黑色。
- 根是黑色。
- 所有叶子都是黑色(叶子是NIL节点)。
- 每个红色节点必须有两个黑色的子节点。(从每个叶子到根的所有路径上不能有两个连续的红色节点。)
- 从任一节点到其每个叶子的所有简单路径都包含相同数目的黑色节点。
红黑树从根节点到叶子节点的最长路径不会超过最短路径的两倍
平衡二叉查找树和红黑树对比
平衡二叉查找树要求左右子树高度差不超过1,红黑树要求从根节点到叶子节点的最长路径不会超过最短路径的两倍,即
平衡二叉查找树查询效率高,但是调整平衡的成本也更高
红黑树平衡成本相对较低,但是查找效率也相对更低
结论:查询频繁的用平衡二叉查找树,增删频繁的用红黑树
B树(B- 树)
简单理解就是一个平衡二叉树的多叉版本,B树的阶数(m)表示一个节点最多有多少子节点,当m为2的时候就是平衡二叉树
特点
-
根结点至少有两个子女。
-
每个中间节点都包含k-1个元素和k个孩子,其中 m/2 <= k <= m
-
每一个叶子节点都包含k-1个元素,其中 m/2 <= k <= m
-
所有的叶子结点都位于同一层。
-
每个节点中的元素从小到大排列,节点当中k-1个元素正好是k个孩子包含的元素的值域分划。
B+树
B树的变体
特点
-
有k个子树的中间节点包含有k个元素(B树中是k-1个元素),每个元素不保存数据,只用来索引,所有数据都保存在叶子节点,即如下图,数据只保存在第三层的叶子节点上。
-
所有的叶子结点中包含了全部元素的信息,及指向含这些元素记录的指针,且叶子结点本身依关键字的大小自小而大顺序链接。
-
所有的中间节点元素都同时存在于子节点,在子节点元素中是最大(或最小)元素。
B树和B+树对比
B树相对于B+树的优点:B树每个节点都存储了数据,不用每次都查找到叶子节点(最好情况是根节点,最坏是叶子节点,即查找不稳定)
B+树相对于B树的优点:只在叶子节点保存数据,在相同空间上可以容纳更多节点元素(本文B+树的图和B树的图层级一样,但是B树每个节点都保存了数据,所以B树每个节点占用内存比B+树大),即数据量相同的情况下,树的层级会更少,也就是查找的次数会更少。而且B+树每次查找都必须查找到叶子节点才能访问到数据,所以每次查找的次数固定,查找性能稳定。所有叶子节点形成有序链表,范围查询更简单