My Little World

多路查找树

特点:
每个结点的孩子可以多于两个,且每一个结点处可以存储多个元素
所有元素之间存在某种特定的排序关系
2-3树:每一个结点都具有两个或者三个孩子的多路查找树,所有叶子结点都在同一层次上
2结点:拥有两个孩子和一个元素,左子树包含元素小于结点元素,右子树则大于,要么有两个孩子,要么一个孩子也没有
3结点:拥有三个孩子两个元素,孩子和结点元素呈一定顺序,要么有三个孩子,要么一个孩子也没有
2-3-4树:每一个结点都具有两个或者三个孩子或四个孩子的多路查找树,所有叶子结点都在同一层次上
4结点:拥有四个个孩子三个元素,孩子和结点元素呈一定顺序,要么有四个孩子,要么一个孩子也没有

2-3树插入原理

1.如果是一个空树,直接插入形成一个2结点,即根结点
2.插入到一个结构为2结点的叶子上,直接将该2结点转为3结点
3.插入到一个结构为3结点的叶子结点,而该叶子结点双亲为2结点,则将该双亲2结点扩展为3结点,将元素插进去
4.插入到一个结构为3结点的叶子结点,而其双亲也为3结点,则继续往上找其双亲的双亲是否为2结点,若是,则将该2结点扩展为3结点,将双亲的一个元素挪上去,将3结点的元素挪到双亲,然后插入元素
5.插入到一个结构为3结点的叶子结点,往上追溯到根结点也为3结点,则说明该子树已满,需要增加树的高度,即将树每个结点拆都分成2结点,从而保证,所有叶结点在统一层次

2-3树删除原理

1.删除的元素位于结构为3结点的叶子上,直接删掉就好,3结点变2结点
2.删除元素位于结构为2结点的叶子上,
若双亲也为2结点结构,且双亲另一个孩子为3结点,则将元素删除后,左旋或右旋,将原来双亲移下来做孩子,将原来3结点一个元素移上去做双亲,另一个不动继续做孩子
若双亲为2结点结构,且双亲另一个孩子也为2结点,假设删除的是左子树的元素,则寻找双亲的双亲的直接后继元素来填充双亲的双亲的元素位置,将双亲的双亲的元素做双亲元素的孩子,将双亲元素移下来做孩子,将双亲原来的孩子移上去做双亲
若双亲是一个3结点结构,则将双亲一个元素移下来,3结点变2结点
若删除时,整颗树是一个满2叉树状态,则将树的深度变小,2结点变3结点
3.删除元素位于结构为2结点的双亲位置,若其右孩子为3结点则将其直接后继结点顶上去,3结点孩子变2结点
4.删除元素位于结构为3结点的双亲位置,若其直接前驱位于3结点结构,则将前驱顶上去,3结点变2结点
若其直接前驱位于2结点结构,则将前驱与直接后继合并为3结点,双亲变2结点

B树

一种平衡的多路查找树,2-3树和2-3-4树都是B树的特例
把结点最大的孩子树数目称为B树的阶,因此2-3树是3阶B树,2-3-4树是4阶B树
一个m阶的B树有如下属性
如果根结点不是叶结点,则其至少有两颗子树
每一个非根的分支节点都有K-1个元素和K个孩子,其中K满足:m/2向上取整 <= K <= m
所有叶子结点都位于同一层次
每个分支结点包含元素个数,该结点各元素及其孩子的信息