ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

2-3树

2019-08-02 23:56:30  阅读:178  来源: 互联网

标签: 结点 graph 二叉 插入 TD 树中


2-3 Tree

2-3树是一种二叉查找树的推广,来提供更好的执行效果

结点

结点类型 键数目 孩子数目
2结点 1 2
3结点 2 3
  • 2结点图示
graph TD 1(B)---|小于B|2(A) 1---|大于B|3(C)
  • 3结点图示
graph TD 1(B D)---|小于B|2(A) 1---|介于B和D之间|4(C) 1---|大于B|3(E)

RULE

完美平衡 每条从根节点到空链接的路径有相同的长度
对称顺序 中序遍历得到升序序列

检索

  • 从一个2-3树中检索H
graph TD 1(M)---|<1> H小于M|2(E J) 1---3(R) 2---4(A C) 2---|<2> H介于E和J之间 OK|5(H) 2---0(L) 3---8(P) 3---9(S X)

插入

插入键落在底部2结点上

  • 往一个2-3树中插入K
    1. 检索K
graph TD 1(M)---|<1> K小于M|2(E J) 1---3(R) 2---4(A C) 2---5(H) 2---|<2> K大于J|0(L) 3---8(P) 3---9(S X)
  1. 将2结点变为3结点
graph TD 1(M)---2(E J) 1---3(R) 2---4(A C) 2---5(H) 2---0(K L) 3---8(P) 3---9(S X)

插入键落在底部3结点上

  • 往一个2-3树中插入Z
    1. 检索K
graph TD 1(M)---2(E J) 1---|<1> Z大于M|3(R) 2---4(A C) 2---5(H) 2---0(L) 3---8(P) 3---|<2> Z大于R|9(S X)
  1. 将3结点变为4结点(按规律来说就是有三个键,四个儿子的结点)
graph TD 1(M)---2(E J) 1---3(R) 2---4(A C) 2---5(H) 2---0(K L) 3---8(P) 3---9(S X Z)
  1. 将4结点分解为两个2结点,同时将中间的键传递给父结点
graph TD 1(M)---2(E J) 1---3(R X) 2---4(A C) 2---5(H) 2---0(K L) 3---8(P) 3---9(S) 3---10(Z)
  1. 检查父节点是否符合2或3结点,如果父结点变为4结点则对父结点执行第三部操作,一直往上检查直到树中不存在4结点

构造2-3树

  1. 空树
  2. 插入第一个键时构造一个2结点放入其中
  3. 插入第二个键时放入之前的2结点
  4. 插入后续的键时执行插入操作

案例

  1. 空树

    graph TD 1(EMPTY)
  2. 插入S(构建一个2结点)

    graph TD 1(S)
  3. 插入E(将2结点换为3结点)

    graph TD 1(E S)
  4. 插入A(将3结点换为4结点)

    graph TD 1(A E S)

    (将4结点换为两个二节点,同时将中间的键传递给父结点)

    graph TD 1(E)---2(A) 1---3(S)
  5. 插入D

    graph TD 1(E)---2(A D) 1---3(S)
  6. 插入C

    graph TD 1(E)---2(A C D) 1---3(S) graph TD 1(C E)---2(A) 1---4(D) 1---3(S)
  7. 插入U

    graph TD 1(C E)---2(A) 1---4(D) 1---3(S U)
  8. 插入T

    graph TD 1(C E)---2(A) 1---4(D) 1---3(S T U) graph TD 1(C E T)---2(A) 1---4(D) 1---3(S) 1---5(U) graph TD 8(E)---1 8---7(T) 1(C)---2(A) 1---4(D) 7---3(S) 7---5(U)

分析

2-3树相较于二叉查找树有很高的效率提升,这是因为二叉查找树对于树的平衡度没有调整,而现实生活中的数据往往是有规律的而非随机的,二叉查找树得到的往往是一颗偏斜的树,导致效率低下

情形 描述 时间复杂度
最坏情形 全是2结点 lgN
最好情形 全是2结点 lg3N
树高度 存储结点
12~20 百万级别
18~30 十亿级别

标签:,结点,graph,二叉,插入,TD,树中
来源: https://www.cnblogs.com/redo19990701/p/11291722.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有