平衡二叉树:或者是一棵空的二叉排序树,或者是具有下列性质的二叉排序树:
⑴ 根结点的左子树和右子树的深度最多相差1;
⑵ 根结点的左子树和右子树也都是平衡二叉树。
平衡因子:结点的平衡因子是该结点的左子树的深度与右子树的深度之差。
最小不平衡子树:在平衡二叉树的构造过程中,以距离插入结点最近的、且平衡因子的绝对值大于1的结点为根的子树。
基本思想:
在构造二叉排序树的过程中,每插入一个结点时,首先检查是否因插入而破坏了树的平衡性,
若是,
则找出最小不平衡子树,
在保持二叉排序树特性的前提下,调整最小不平衡子树中各结点之间的链接关系,进行相应的旋转,使之成为新的平衡子树。
为恢复平衡并保持二叉排序树的特性,可首先将B改为C的左子,而C原来的左子改为B的右子;然后将A改为C的右子, C原来的右子改为A的左子
综上所述
在一个平衡二叉排序树上插入一个新结点S时,主要包括以下三步:
(1) 查找应插位置, 同时记录离插入位置最近的可能失衡结点A(A的平衡因子不等于0)。
(2) 插入新结点S, 并修改从A到S路径上各结点的平衡因子。
(3) 根据A、 B的平衡因子, 判断是否失衡以及失衡类型, 并做相应处理。
m阶B-树:
是满足下列特性的树:
(1) 树中每个结点至多有m棵子树;
(2) 若根结点不是终端结点,则至少有两棵子树;
(3) 除根结点外,其他非终端结点至少有m/2 棵子树;
(4)所有非终端结点都包含以下数据:
(n,A0,K1,A1,K2,…,Kn,An)
其中,n(m/2 1≤n≤m 1)为关键码的个数;
Ki(1≤i≤n)为关键码,且Ki<Ki+1(1≤i≤n-1);
Ai(0≤i≤n)为指向子树根结点的指针,且指针Ai所指子树中所有结点的关键码均小于Ki+1大于Ki。
(5)所有叶子结点都在同一层上,B树是高平衡的。
B树的插入
基本原理:
当一个节点中插入新的数据时,
会造成节点中数据个数大于(m-1),
此时需要分裂节点,
将节点中第[m/2]+1个数据插入到当前节点的前驱中,
当前节点分裂为两个节点。
当最下层结点中的关键字数大于m/2 -1 时,可直接删除。
当最下层待删关键字所在结点中关键字数目为最低要求m/2 -1时,如果其左(右)兄弟中关键字数目大于m/2 -1,则可采用“父子换位法”。
当最下层待删结点及其左右兄弟中的关键字数目均为最低要求数目m/2 -1时,需要进行合并处理,合并过程与插入时的分裂过程“互逆”,合并一次, 分支数少一,可能出现 “连锁合并”, 当合并到根时, 各分支深度同时减1。
B树的结构定义
m阶B+树的结构定义如下:
(1)每个结点至多有m个子结点;
(2)每个结点(除根外)至少有ceiling(m/2)个子结点;
(3)根结点至少有两个子结点;
(4)有k个子结点的结点必有k个关键码。
m阶B+树:
是满足下列特性的树:
⑴ 含有m个关键码,每一个关键码对应一棵子树。
⑵ 关键码Ki是它所对应的子树的根结点中的最大(或最小)关键码。
⑶ 所有终端结点中包含了全部关键码信息,以及指向关键码记录的指针。
⑷ 所有终端结点按关键码的大小链在一起,形成单链表,并设置头指针。
平衡二叉树是一种保持左右子树高度差不超过1的二叉排序树,通过旋转调整保持平衡。插入节点时涉及查找、插入和平衡判断。B树是一种高平衡树,每个节点最多有m个子节点,所有叶子结点在同一层,插入和删除操作涉及节点分裂和合并。B+树则所有叶子结点包含所有关键码并链在一起。
6580

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



