数据结构之树小结2
二叉树
二叉搜索树(BST)
也叫二叉查找树,二叉排序树,二分法的一个数据结构。
特点:
- 若它的左子树不为空,则左子树上所有结点的值全部小于它的根节点的值
- 若它的有右子树不为空,则右子树上所有结点的值全部大于它的根节点的值
- 同时它的左右子树也都是二叉搜索树
平衡二叉树(AVL树)
- 首先要具有二叉搜索树性质
- 它是一棵空树或它的左右两个子树的高度差的绝对值不超过1
- 并且左右两个子树都是一棵平衡二叉树
红黑树
- 满足二叉查找树的性质,其实就是一种特殊的二叉查找树
- 根节点一定是黑色,其余每个结点是黑色或者红色
- 每个叶子节点(NIL)为黑色,这里指的是为空的叶子节点
- 如果一个节点是红色,那它的子节点必须是黑色的
- 从一个节点到该节点的子孙节点的所有路径上包含相同数目的黑节点。(这一点是平衡的关键)
红黑树应用
应用:STL中的set和map,linux中的虚拟内存管理等
插入和删除节点
建议参考书本。
多叉树
B树(多路查找树)
图片参考:B树和B+树详解
B树是一种平衡的多路查找树。节点最大的孩子数目称为B树的阶。一个m阶的B树具有如下几个特征:B树中所有结点的孩子结点最大值称为B树的阶,通常用m表示。一个结点有k个孩子时,必有k-1个关键字才能将子树中所有关键字划分为k个子集
特点:
- 如果根节点不是叶子节点,则其至少有两棵子树
- 每个中间节点都包含k-1个元素和k个孩子(指向孩子节点的指针)
- 所有叶子节点都处于同一层,并且都包含k-1个元素
- 每个容器中的元素从小到大排列,节点当中k-1个元素正好是k个孩子包含的元素的值域划分
- 每个结点的结构为:(n,A0,K1,A1,K2,A2,… ,Kn,An)
其中,Ki(1≤i≤n)为关键字,且Ki<Ki+1(1≤i≤n-1)。
Ai(0≤i≤n)为指向子树根结点的指针。且Ai所指子树所有结点中的关键字均小于Ki+1。
n为结点中关键字的个数,满足ceil(m/2)-1≤n≤m-1。
B+树
图片参考:B树和B+树详解
特点:
- 有k个子树的中间节点包含有k个元素(B树中是k-1个元素),每个元素不保存数据,只用来索引,所有数据都保存在叶子节点
- 所有的叶子结点中包含了全部元素的信息,及指向含这些元素记录的指针,且叶子结点本身依关键字的大小自小而大顺序链接
- 所有的中间节点元素都同时存在于子节点,在子节点元素中是最大(或最小)元素
B树和B+树的区别
以一个m阶树为例子:
- 关键字的数量不同:B树一个大节点中有m个小节点和m-1个关键字,这些关键字都包含数据信息;而B+树一个大节点中有m个小节点和m个关键字,但是这些关键字只是起到一个索引(指向儿子节点的指针)的作用,数据信息都保存在叶子节点中
- 数据的存储位置不同:B树中的数据存在每一个节点中,而B+树的数据只存在叶子节点上
- 查询不同:B树在找到具体的数值以后,则结束,而B+树则需要通过索引找到叶子结点中的数据才结束,也就是说B+树的搜索过程中走了一条从根结点到叶子结点的路径。