zoukankan      html  css  js  c++  java
  • 多路平衡树之2-3查找树

    2-3查找树的定义(平衡树)

    • 2-结点
      • 含有一个键 (及其对应的值)和两条链 ,左链接指向2-3树中的键都小于该节点,右链接指向的2-3树中的节点都大于该结点
    • 3-结点
      • 含有两个键 (及其对应的值)和三条链 ,左链接指向的2-3树中的键都小于该结点,中链接指向的2-3树中的键都位于该结点的两个键之间,右链接指向的2-3树中的键都大于该结点

    插入操作

    • 向2- 结点中插入新键

      • 找到键,将结点替换为一个新的含有k的3- 结点
    • 向3- 结点中插入新键

      • 假如2-3树只包含一个3-结点,这个结点有两个键,没有空间来插入第三个键了,最自然的方式是我们假设这个点能存放三个元素,暂时使其变成一个4-结点,同时包含4条链接,然后我们将这个4-结点的中间元素提升,左边的键作为其左子结点,右边的键作为其右子结点。插入完成,变为平衡2-3查找树 ,树的高度从0变为1
    • 向一个父结点为2-结点的3-结点中插入新键

      • 和上面的情况一样一样,我们也可以将新元素插入到3-结点中,使其成为一个临时的4-结点,然后,将该结点中的中间元素提升到父结点即2-结点中,使其父结点成为一个3-结点,然后将左右结点分表挂在这个3-结点的恰当位置

    • 向一个父结点为3-结点的3-结点中插入新键
      • 当我们插入的结点是3- 结点的时候,我们将该结点拆分,中间元素提升至父结点,但是此时父结点是一个3- 结点,插入之后,父结点变成了4- 结点,然后继续将中间元素提升至父结点,直至遇到一个父结点是2- 结点,然后将其变为3- 结点,不需要再次拆分



    • 分解根结点
      • 当插入的结点到根结点的路径上全部是3- 结点的时候,最终我们的根结点会变成一个临时的4- 结点 ,此时,就需要将根结点拆分为两个2-结点 ,树的高度+1


    2-3树的性质

    • 对于一棵完全平衡的2-3树

      1. 任意的终端结点(无子树的叶结点)到根结点的路径长度都是相等的
      2. 4- 结点 变换为3结点时,树的高度不会发生变化,只有当根结点是临时的4- 结点时 ,分解根结点时,树高度+1
      3. 2-3 树与普通二叉查找树的最大区别在于,普通的二叉查找树是自顶向下生长,而2-3 树是自底向上生长 ,因为2-3二叉树 根结点子链只能是2或3,插入元素时,超过个数会将当前的多于的元素上移(向上生长)
    • 笔记整理,学自Bilibili黑马

  • 相关阅读:
    姚班
    xxx
    1358B
    1368A
    莫烦Tensorflow 建造自己的NN
    莫烦Tensorflow 入门
    linux服务器安装Apache (Centos)
    C++ 获取Linux 服务器CPU占用率+内存空闲率(亲测绝对可以运行)
    MySQL主键从初始值自增
    基础练习 矩阵乘法
  • 原文地址:https://www.cnblogs.com/luckyCoder/p/12733208.html
Copyright © 2011-2022 走看看