2-3 Tree

二叉搜索树的每个节点只带有一个值,这个值将数据区间划分成两部分,值左边的部分(也就是小于这个值的数据)保存到节点的左子树,值右边的部分保存到节点的右子树。因此,每个非叶子节最多能够拥有两个子节点。

如果每个节点保存两个值,那么这两个值可以将数据区间划分成三部分,左边部分的数据保存在左子树,右边部分的数据保存在右子树,介于两个值之间的那部分数据保存在中间子树。也就是说,在一个节点保存两个值的情况下,这个节点有三个子节点。

节点可以存储1个或者2个值的搜索树,就是2-3树了。二叉搜索树的查找效率为O(h),h为树的高度。在最好的情况下(完全平衡),有N个节点的二叉搜索树的高度为h=log(N),但添加删除节点时二叉搜索树容易失去平衡,失去平衡后树的高度就会发生变化,最差情况下,树的高度为N。使用平衡算法来平衡二叉搜索树,又需要花费额外的开销。

2-3树在插入数据过程中,会自动平衡。二叉搜索树的新节点只能作为叶子节点添加,而添加叶子节点提高了增加树高度的概率;二叉搜索树的根节点一旦确定就不会再被修改,直观地想下,如果根节点的值在数据区间的两端,那么最终肯定会导致树的非常不平衡。另一方面,因为二叉搜索树的节点只能保存一个值,同2-3树可以最多保存2个值相比,即使在都完全平衡的情况下,2-3树的高度也要小。

2-3树插入新节点时,如果插入点已经存在2个值,那么它首先将新值和原来的2个值放在一起构成3个值的节点,然后将这三个值的中间值向上提到父节点, 而剩余的两个值变成了父节点的两个子节点(因为分别在中间值的左右两边)。父节点也做相同的处理,依次向上提,直到根节点, 如果根节点已经为2个值的节点,那么就会改变根节点的值。这种“将中间值向上提”的过程,实际就是自动平衡的过程。

2-3树的最差查找效率为lgN,最好查找效率为log3N,约等于0.631lgN

本节主要参考浅谈算法和数据结构:平衡查找树之2-3树

B-tree

本节主要参考MySQL索引背后的数据结构及算法原理

B-tree的更多相关文章

  1. [数据结构]——二叉树(Binary Tree)、二叉搜索树(Binary Search Tree)及其衍生算法

    二叉树(Binary Tree)是最简单的树形数据结构,然而却十分精妙.其衍生出各种算法,以致于占据了数据结构的半壁江山.STL中大名顶顶的关联容器--集合(set).映射(map)便是使用二叉树实现 ...

  2. SAP CRM 树视图(TREE VIEW)

    树视图可以用于表示数据的层次. 例如:SAP CRM中的组织结构数据可以表示为树视图. 在SAP CRM Web UI的术语当中,没有像表视图(table view)或者表单视图(form view) ...

  3. 无限分级和tree结构数据增删改【提供Demo下载】

    无限分级 很多时候我们不确定等级关系的层级,这个时候就需要用到无限分级了. 说到无限分级,又要扯到递归调用了.(据说频繁递归是很耗性能的),在此我们需要先设计好表机构,用来存储无限分级的数据.当然,以 ...

  4. 2000条你应知的WPF小姿势 基础篇<45-50 Visual Tree&Logic Tree 附带两个小工具>

    在正文开始之前需要介绍一个人:Sean Sexton. 来自明尼苏达双城的软件工程师.最为出色的是他维护了两个博客:2,000Things You Should Know About C# 和 2,0 ...

  5. Leetcode 笔记 110 - Balanced Binary Tree

    题目链接:Balanced Binary Tree | LeetCode OJ Given a binary tree, determine if it is height-balanced. For ...

  6. Leetcode 笔记 100 - Same Tree

    题目链接:Same Tree | LeetCode OJ Given two binary trees, write a function to check if they are equal or ...

  7. Leetcode 笔记 99 - Recover Binary Search Tree

    题目链接:Recover Binary Search Tree | LeetCode OJ Two elements of a binary search tree (BST) are swapped ...

  8. Leetcode 笔记 98 - Validate Binary Search Tree

    题目链接:Validate Binary Search Tree | LeetCode OJ Given a binary tree, determine if it is a valid binar ...

  9. Leetcode 笔记 101 - Symmetric Tree

    题目链接:Symmetric Tree | LeetCode OJ Given a binary tree, check whether it is a mirror of itself (ie, s ...

  10. Tree树节点选中及取消和指定节点的隐藏

    指定节点变色 指定节点隐藏 单击节点 未选中则选中该节点 已选中则取消该节点 前台: 1.HTML <ul id="listDept" name="listDept ...

随机推荐

  1. 图解GitHub基本操作

    目录 一.注册并登陆到github网站 1.1.打开github网站首页(https://github.com/) 1.2.注册一个自己的github账号 1.3.登陆自己的github账号 二.创建 ...

  2. Python小知识

    列表解析 from random import randint data =[randint(-10,10) for _ in range(10)] 1.[x for x in data if x & ...

  3. 移动端自动化环境搭建-Robot Framework的安装

    A.安装依赖 RF框架,robotframework本身. B.安装过程 可以通过下载 exe 程序进行安装,Robot Framework 分别提供了,win-amd64.exe 和 win32.e ...

  4. Js根据Ip地址自动判断是哪个城市

    var province = '' ;var city = '' ;jQuery.getScript("http://int.dpool.sina.com.cn/iplookup/iploo ...

  5. mysql source导入报错ERROR 1366的解决方法

    文件是utf8的,数据库表是utf8的,为什么客户端导入会报错呢? 发现客户端用的是gbk的 改为utf8后正常 SHOW VARIABLES LIKE 'character%'; +-------- ...

  6. zabbix数据库mariadb从服务器迁移到云mysql数据库的操作

    zabbix数据库mariadb从本机迁移到云mysql数据库的操作 1.将zabbix数据库导出,并导入到云数据库中 由于数据库较大,如果直接使用shell会话中断会导致数据库导出或者导入失败,使用 ...

  7. SharePoint Style Library的权限问题

    Style Library是属于site collection级别的. 所以如果在某一个site中直接给某个用户设置了比如Full control的权限,这个权限信息并不会自动进入Style Libr ...

  8. 原生js操作dom备忘

    <!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset="utf-8& ...

  9. leetcode-javascript

    1. Largest Number For example, given [3, 30, 34, 5, 9], the largest formed number is 9534330. // wro ...

  10. windows下手动安装和配置xamarin

    安装xamarin xamarin官方给出了两种安装方式,自动安装和手动安装. 自动安装比较简单,到http://xamarin.com/download下载xamarininstaller.exe ...