2-3树——NWU_LK

2-3树

2-3树的基本定义

2-3树的意思就是说,一个父节点可以有两个子节点,也可以有三个子节点,并且其也满足类似二叉搜索树的定义(父节点的值大于左子树,但小于右子树),所有叶子节点都在同一层。

2节点:父节点存储一个值,最多有左右两个子树。假设父节点为p,子节点为l(左节点)、r(有节点),且满足:l < p < r

3节点:父节点存储两个值,最多有左中右三个子树。假设父节点分别为p1,p2,子节点分别为l(左节点)、m(中间节点)、r(右节点),且满足:l < p1,p1 < m < p2,r > p2

节点分裂与合并

节点分裂:若三节点插入一个值后变为了4结点那就需要结点分裂,分裂就是将中间的值作为单独的结点,然后让两边的值分别变为它的孩子。如图所示:
在这里插入图片描述

节点合并:分裂过后,让中间的结点和之前父亲节点进行合并,如图所示:
在这里插入图片描述

2-3树的插入
  • 待插入节点为2节点
    如果不能直接放到空的子节点,则放到父节点中,此时成为3节点,仍然满足定义。
  • 待插入节点为3节点
    插入节点后,待插入节点变为4节点,因此需要进行分裂,并且与父节点进行合并,若分裂过后的父节点满足定义则完成插入,若父节点也变为4节点则需要继续将父节点分裂并且与爷爷节点合并,直到所有节点满足定义插入结束。
2-3树的删除

因为要保证删除节点后所有的空节点能够尽量保持在同一层,所以要进行调整。

  • 删除节点在叶子节点
    1. 删除节点为3节点:
      直接删除相应的值即可
    2. 删除节点为2节点:
      1. 该节点的兄弟节点为3节点、双亲节点为2节点:
        将双亲节点移动到当前位置,并且再将兄弟节点中最接近当前位置的key移动到双亲节点中
      2. 该节点的兄弟节点为2结点,双亲节点为3节点:
        此时兄弟节点不够借,父节点降元,从3节点变成2节点,与兄弟节点合并。
      3. 该节点的兄弟节点、双亲节点都为为2节点:
        将父节点和兄弟节点合并,形成新的节点,这是把新节点当做当前节点,不断套用上述几种情况进行调整,直至平衡。
  • 删除节点为非叶子节点:
    中序遍历找到该节点的直接前驱或者直接后继,将该节点与该节点进行交换,然后删除交换后的叶子节点,再按照删除叶子节点的方法去调整

全文参考于:从2-3树理解红黑树,该文章文图并茂,这里只做笔记,详情点进去自己看哦。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值