数据结构与算法之2-3树

174 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 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) 在这里插入图片描述