数据结构和算法学习(10)- 2-3-4树
来源:互联网 发布:基本款 外套 知乎 编辑:程序博客网 时间:2024/06/05 15:50
之前所提到的树全部都是二叉树,即每个节点有一个数据项,每个节点最多有两个子节点。
有多个数据项和更多子节点的树被称作多叉树,所要学习的2-3-4树就是一种多叉树,他的每个节点最多有四个子节点和三个数据项。
2-3-4树同红黑树一样是平衡树,他的效率稍差,但是编程更加容易
2-3-4树简介
2-3-4树名字中的2、3、4的含义指的是每个节点可能含有的子节点的个数
对于非叶结点有三种情况:
有一个数据项的节点总是有两个子节点
有两个数据项的节点总是有三个子节点
有三个数据项的节点总是有四个子节点
也就是说,非叶结点的子节点数总是比他含有的数据项多1。
在二叉树中,节点最多有两个子节点的连接,而且可以只有一个连接;
而在2-3-4树中,不允许只有一个连接,有一个数据项的节点必须总是保有两个链接,除非他是叶结点,这种情况下可以没有连接
下图说明了2-3-4树中链与数据项关键字值之间的关系
2-3-4树搜索
查找特定关键字的数据项和在二叉树中搜索过程类似,从跟开始,除非查找的关键字就是根,否则选择关键字值所在的核实范围,转向那个方向,直到查到为止
2-3-4树插入
新的数据项总是插在叶结点里,在树的最底层
如果插入到有子节点的节点里,子节点的编号就要发生变化来保证树的结构
2-3-4树中插入节点有时比较简单,有时相当复杂,但是无论哪种情况都是从查找适当的叶结点开始。
如图所示插入数据项18:
涉及节点分裂
如果往下寻找要插入位置的过程中,节点已经满了,插入就变得复杂。
发生这种情况的话,节点就要分裂来保证树的平衡,如下图所示
还有一种更为特殊的情况,即一开始插入式就碰到满的根,如下图所示
2-3-4树和红黑树的转化
通俗来讲三条规则:
2-3-4树的2-节点转换为红黑树的黑色节点
2-3-4树的3-节点转换成一个子节点和一个父节点,子节点红色,父节点黑色
2-3-4树的4-节点转换成一个父节点和两个子节点,子节点红色,父节点黑色
2-3-4树的效率
分析2-3-4树的效率比红黑树要难,所以要从两者的等价性开始分析
红黑树的层数大概是log2(N+1),所以搜索时间与层数成正比
相同的数据而言,2-3-4树比红黑树的层数要少
2-3-4树每个节点最多可以有4个子节点,如果每个节点都是满的,树的高度应该和log4N成正比,所以在这种情况下2-3-4树的高度大概是红黑树的一半
不过这种情况几乎不可能发生,所以2-3-4树的高度大致在log2(N+1)和log2(N+1)/2之间
但是由于每个节点的数据项也会增加,同样会增加查找时间,所以大致算来2-3-4树中增加的每个节点的数据项数量可以抵偿树的高度的减少,所以2-3-4树中的查找时间与平衡二叉树大致相等,都是O(logN)
- 数据结构和算法学习(10)- 2-3-4树
- 学习数据结构和算法
- 数据结构和算法学习
- 数据结构和算法学习(4)-栈和队列
- 数据结构和算法学习(8)-二叉树
- 数据结构和算法学习(3)-简单排序
- 数据结构和算法学习(2)-时间复杂度
- 数据结构和算法--二叉树学习
- 数据结构和算法学习笔记-3
- 数据结构和算法学习笔记-2
- 数据结构和算法学习(1)-概述
- 数据结构和算法学习(5)-链表
- 数据结构和算法学习(6)-递归
- 数据结构和算法学习(9)-红黑树
- 数据结构和算法学习(11)-哈希表
- 数据结构和算法学习(12)-堆
- 【数据结构和算法06】2-3-4树
- 数据结构和算法06 之2-3-4树
- 【Java SE】java反射机制
- 通过DYLD_INSERT_LIBRARIES实现基于动态库的hook功能
- 4-读书笔记----iOS开发指南:从零基础到App Store上架--iOS视图控制器与导航模式
- WEB开发技术详解HTML协议
- 【Android】【设计】Android 架构设计
- 数据结构和算法学习(10)- 2-3-4树
- 【神器】insert_dylib 给 MacOSX APP 添加导入表注入--你懂的~~
- 完全卸载oracle步骤
- HTML5后台管理模板
- 第一次window 7设置mysql环境中遇到的问题以及解决办法
- J2EE Specification level指的是什么和J2EE规范讲解
- DataGrid中的全选和单选的功能
- 基于Nodejs+express4+Mongodb+Angularjs建立web项目
- 基于android端计步器软件的尝试