持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第17天,点击查看活动详情
2-3树
2-3树定义
- 所有叶子节点都要在同一层
- 二节点要么有两个子节点,要么没有节点
- 三节点要么没有节点,要么有三个子节点
- 不能出现节点不满的情况
2-3树插入的操作
插入原理:
对于2-3树的插入来说,与平衡二叉树相同,插入操作一定是发生在叶子节点上,并且节点的插入和删除都有可能导致不平衡的情况发生,在插入和删除节点时也是需要动态维持平衡的,但维持平衡的策略和AVL树是不一样的。
AVL树向下添加节点之后通过旋转来恢复平衡,而2-3树是通过节点向上分裂来维持平衡的,也就是说2-3树插入元素的过程中层级是向上增加的,因此不会导致叶子节点不在同一层级的现象发生,也就不需要旋转了。
三种插入情况:
1)对于空树,插入一个2节点即可;
2)插入节点到一个2节点的叶子上。由于本身就只有一个元素,所以只需要将其升级为3节点即可(如:插入3)。
3)插入节点到一个3节点的叶子上。因为3节点本身最大容量,因此需要拆分,且将树中两元素或者插入元素的三者中选择其一向上移动一层。
分为三种情况:
- 升级父节点(插入5)
- 升级根节点(插入11)
- 增加树高度(插入2,从下往上拆)
2-3树删除的操作
删除原理:2-3树的删除也分为三种情况,与插入相反。
三种删除情况:
1)所删元素位于一个3节点的叶子节点上,直接删除,不会影响树结构(如:删除9)
2)所删元素位于一个2节点上,直接删除,破坏树结构
分为四种情况:
-
此节点双亲也是2节点,且拥有一个3节点的右孩子(如:删除1)
-
此节点的双亲是2节点,它右孩子也是2节点(如:删除4)
-
此节点的双亲是3节点(如:删除10)
-
当前树是一个满二叉树,降低树高(如:删除8)
3)所删元素位于非叶子的分支节点。此时按树中序遍历得到此元素的前驱或后续元素,补位
两种情况:
- 分支节点是2节点(如:删除4)
- 分支节点是3节点(如:删除12)