二叉树
定义
二叉树是每个结点最多有两个子树的树结构。
性质
二叉树的每个结点至多只有二棵子树(不存在度大于2的结点
二叉树的子树有左右之分,次序不能颠倒
二叉树的第i层至多有2^{i-1}个结点
深度为k的二叉树至多有2^k-1个结点
对任何一棵二叉树T,如果其终端结点数为n0,度为2的结点数为n2,则n0=n2+1。
满二叉树
定义:
一棵深度为k,且有2^k-1个节点的二叉树,称为满二叉树。
性质
每一层上的节点数都是最大节点数
完全二叉树
定义
一棵二叉树中,除最后一层外,若其余层都是满的,并且最后一层或者是满的,或者是在右边缺少连续若干节点
性质
具有n个节点的完全二叉树的深度为log2(n+1)
深度为k的完全二叉树,至少有2^(k-1)个节点,至多有2^k-1个节点
线索二叉树
定义
n个结点的二叉链表中含有n+1(2n-(n-1)=n+1)个空指针域。利用二叉链表中的空指针域,存放指向结点在某种遍历次序下的前驱和后继结点的指针(这种附加的指针称为”线索”)。
这种加上了线索的二叉链表称为线索链表,相应的二叉树称为线索二叉树(Threaded BinaryTree)。根据线索性质的不同,线索二叉树可分为前序线索二叉树、中序线索二叉树和后序线索二叉树三种。
注意
线索链表解决了无法直接找到该结点在某种遍历序列中的前驱和后继结点的问题,出现了二叉链表找左、右孩子困难的问题。(PS:我也不是很理解,等回头我理解透了我再专门写一篇来介绍)
哈夫曼树(最优二叉树)
定义
给定n个权值作为n个叶子结点,构造一棵二叉树,若该树的带权路径长度达到最小,称这样的二叉树为最优二叉树,也称为哈夫曼树(Huffman Tree)。
性质
哈夫曼树是带权路径长度最短的树,权值较大的结点离根较近
哈夫曼树的绘制方法参考这篇博客:(https://blog.csdn.net/lzw66666/article/details/78934893)
二叉搜索树/二叉排序树/二叉查找树
定义
它或者是一棵空树,或者是具有下列性质的二叉树: 若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值; 若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值
性质
它的左、右子树也分别为二叉排序树。
平衡二叉树
定义
平衡二叉树又称AVL树,它是一 棵空树或它的左右两个子树的高度差的绝对值不超过1
性质
左右两个子树都是一棵平衡二叉树
实现方式
红黑树,AVL,替罪羊树,Treap(树堆),伸展树,SBT(自平衡查找树)
B树
定义
即为二叉搜索树
性质
所有非叶子结点至多拥有两个儿子(Left和Right);
所有结点存储一个关键字;
非叶子结点的左指针指向小于其关键字的子树,右指针指向大于其关键字的子树;
搜索方法
B树的搜索,从根结点开始,如果查询的关键字与结点的关键字相等,那么就命中;
否则,如果查询关键字比结点关键字小,就进入左儿子;如果比结点关键字大,就进入
右儿子;如果左儿子或右儿子的指针为空,则报告找不到相应的关键字;
B-树
定义
是一种多路搜索树
性质
1.定义任意非叶子结点最多只有M个儿子;且M>2;
2.根结点的儿子数为[2, M];
3.除根结点以外的非叶子结点的儿子数为[M/2, M];
4.每个结点存放至少M/2-1(取上整)和至多M-1个关键字;(至少2个关键字)
5.非叶子结点的关键字个数=指向儿子的指针个数-1;
6.非叶子结点的关键字:K[1], K[2], …, K[M-1];且K[i] < K[i+1];
7.非叶子结点的指针:P[1], P[2], …, P[M];其中P[1]指向关键字小于K[1]的
子树,P[M]指向关键字大于K[M-1]的子树,其它P[i]指向关键字属于(K[i-1], K[i])的子树;
8.所有叶子结点位于同一层;
搜索
从根结点开始,对结点内的关键字(有序)序列进行二分查找,如果
命中则结束,否则进入查询关键字所属范围的儿子结点;重复,直到所对应的儿子指针为
空,或已经是叶子结点;
特性
1.关键字集合分布在整颗树中;
2.任何一个关键字出现且只出现在一个结点中;
3.搜索有可能在非叶子结点结束;
4.其搜索性能等价于在关键字全集内做一次二分查找;
5.自动层次控制;
B+树
定义
B+树是B-树的变体,也是一种多路搜索树
性质
1.其定义基本与B-树同,除了:
2.非叶子结点的子树指针与关键字个数相同;
3.非叶子结点的子树指针P[i],指向关键字值属于[K[i], K[i+1])的子树(B-树是开区间)
5.为所有叶子结点增加一个链指针;
6.所有关键字都在叶子结点出现
特性
1.所有关键字都出现在叶子结点的链表中(稠密索引),且链表中的关键字恰好
是有序的;
2.不可能在非叶子结点命中;
3.非叶子结点相当于是叶子结点的索引(稀疏索引),叶子结点相当于是存储(关键字)数据的数据层;
4.更适合文件索引系统;
分裂
当一个结点满时,分配一个新的结点,并将原结点中1/2的数据
复制到新结点,最后在父结点中增加新结点的指针;B+树的分裂只影响原结点和父
结点,而不会影响兄弟结点,所以它不需要指向兄弟的指针;
B*树
定义
是B+树的变体,在B+树的非根和非叶子结点再增加指向兄弟的指针;
性质
B*树定义了非叶子结点关键字个数至少为(2/3)*M,即块的最低使用率为2/3
(代替B+树的1/2)
分裂
当一个结点满时,如果它的下一个兄弟结点未满,那么将一部分
数据移到兄弟结点中,再在原结点插入关键字,最后修改父结点中兄弟结点的关键字
(因为兄弟结点的关键字范围改变了);如果兄弟也满了,则在原结点与兄弟结点之
间增加新结点,并各复制1/3的数据到新结点,最后在父结点增加新结点的指针;
所以,B*树分配新结点的概率比B+树要低,空间使用率更高;
红黑树
定义
是一种自平衡二叉查找树,典型的用途是实现关联数组。
性质
性质1. 节点是红色或黑色。
性质2. 根节点是黑色。
性质3 每个叶节点(NIL节点,空节点)是黑色的。
性质4 每个红色节点的两个子节点都是黑色。(从每个叶子到根的所有路径上不能有两个连续的红色节点)
性质5. 从任一节点到其每个叶子的所有路径都包含相同数目的黑色节点。

本文详细介绍了二叉树的多种类型,包括满二叉树、完全二叉树、线索二叉树、哈夫曼树、二叉搜索树以及平衡二叉树的概念和性质。此外,还深入讲解了B树、B-树、B+树和B*树的定义、特点和分裂过程,阐述了它们在数据存储和检索中的优势。
2582

被折叠的 条评论
为什么被折叠?



