diff --git a/README.md b/README.md index 5c2a295..67169e7 100644 --- a/README.md +++ b/README.md @@ -1132,12 +1132,59 @@ typedef struct BiTNode * 关联数组:如STL中的map、set -#### B树 +##### 红黑树的特征是什么? -#### B+树 +* 节点是红色或黑色。 +* 根是黑色。 +* 所有叶子都是黑色(叶子是NIL节点)。 +* 每个红色节点必须有两个黑色的子节点。(从每个叶子到根的所有路径上不能有两个连续的红色节点。) +* 从任一节点到其每个叶子的所有简单路径都包含相同数目的黑色节点。 + +##### 红黑树、B树、B+的区别? + +* 红黑树的深度比较大,而B树和B+树的深度则相对要小一些 +* 而B树和B+树则将数据都保存在叶子节点,同时通过链表的形式将他们连接在一起。 + +#### B树(B-tree)、B+树(B+-tree) + +![B树(B-tree)、B+树(B+-tree)](https://i.stack.imgur.com/l6UyF.png) + +##### 特点 + +* 一般化的二叉查找树(binary search tree) +* “矮胖”,内部(非叶子)节点可以拥有可变数量的子节点(数量范围预先定义好) + +##### 应用 + +* 大部分文件系统、数据库系统都采用B树、B+树作为索引结构 + +##### 区别 + +* B+树中只有叶子节点会带有指向记录的指针(ROWID),而B树则所有节点都带有,在内部节点出现的索引项不会再出现在叶子节点中。 +* B+树中所有叶子节点都是通过指针连接在一起,而B树不会。 + +##### B树的优点 + +对于在内部节点的数据,可直接得到,不必根据叶子节点来定位。 + +##### B+树的优点 + +* 非叶子节点不会带上ROWID,这样,一个块中可以容纳更多的索引项,一是可以降低树的高度。二是一个内部节点可以定位更多的叶子节点。 +* 叶子节点之间通过指针来连接,范围扫描将十分简单,而对于B树来说,则需要在叶子节点和内部节点不停的往返移动。 + +> B树、B+树区别来自:[differences-between-b-trees-and-b-trees](https://stackoverflow.com/questions/870218/differences-between-b-trees-and-b-trees)、[B树和B+树的区别](https://www.cnblogs.com/ivictor/p/5849061.html) #### 八叉树 +![](https://upload.wikimedia.org/wikipedia/commons/thumb/3/35/Octree2.png/400px-Octree2.png) + +八叉树(octree),或称八元树,是一种用于描述三维空间(划分空间)的树状数据结构。八叉树的每个节点表示一个正方体的体积元素,每个节点有八个子节点,这八个子节点所表示的体积元素加在一起就等于父节点的体积。一般中心点作为节点的分叉中心。 + +##### 用途 + +* 三维计算机图形 +* 最邻近搜索 + ### 图 ## 算法