首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

什么是2-3树

2-3树 VS 二叉搜索树 同样的一组数据,在2-3树和二叉搜索树里面的对比如下: ?...可以看到2-3树的节点分布非常均匀,且叶子节点的高度一致,并且如果这里即使是AVL树,那么树的高度也比2-3树高,而高度的降低则可以提升增删改的效率。...2-3树的插入 为了保持平衡性,2-3树的插入如果破坏了平衡性,那么树本身会产生分裂和合并,然后调整结构以维持平衡性,这一点和AVL树为了保持平衡而产生的节点旋转的作用一样,2-3树的插入分裂有几种情况如下...2-3树的删除 2-3树节点的删除也会破坏平衡性,同样树本身也会产生分裂和合并,如下: ?...2-3-4树可以再次降低的树的高度,但是对应的编码会更加复杂,尤其是在插入和删除之后,所以常常会被容易实现和理解的红黑树代替,这里不再过多介绍。感兴趣的朋友可以自行查询资料学习。

2.1K20

2-3树与红黑树

第一次接触红黑树是在关于hashMap,上来就扔五个特性,说满足这五个特点的二分搜索树就是红黑树。 (1)每个节点或者是黑色,或者是红色。 (2)根节点是黑色。...瞬时懵逼……我扔十个特性,是不是能定义一个红绿灯树呢。所以一直不明白红黑树为什么要这么定义。 直到今天了解了2-3树,才豁然开朗。2-3树是一种神奇的树,它能够保证该树是一个完美树。...2-3树可以演化成红黑树,这便是保证红黑树效率的根本。 先说奇葩的2-3树,首先2-3树满足二分搜索树,但每个节点可能存在1或2个数据,对应的该节点就可能存在2或3个子节点 2-3树 ?...2-3树引入.png 2-3树插入操作: ? 2-3树.png 2-3树演化为红黑树 将三节点拆为两个节点,并将左数据节点设为红色来实现2-3树同等功能 ? 红黑树.png

52030
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    Java数据结构与算法解析——2-3树

    平衡查找树的数据结构能够保证在最差的情况下也能达到lgN的效率,要实现这一目标我们需要保证树在插入完成之后始终保持平衡状态,这就是平衡查找树(Balanced Search Tree)。...2-3查找树概述 2-3树是最简单的B-树(或-树)结构,其每个非叶节点都有两个或三个子女,而且所有叶都在统一层上。2-3树不是二叉树,其节点可拥有3个孩子。不过,2-3树与满二叉树相似。...一棵2-3查找树或为一颗空树,或由以下节点组成: 1)2-节点:含有一个键和两条链接,左链接指向的2-3树中的键都小于该节点,右链接指向的2-3树中的键都大于该节点。...距离来说,对于1百万个节点的2-3树,树的高度为12-20之间,对于10亿个节点的2-3树,树的高度为18-30之间。...下面是2-3查找树的效率: ? 最后贴上一张2-3树的构造过程: ? JAVA架构

    1.2K70

    算法原理系列:2-3查找树

    结构缘由 首先,搞清楚2-3查找树为什么会出来,它要解决什么样的问题?假设我们对它的基本已经有所了解了。先给它来个简单的定义: 2-3查找树: 一种保持有序结构的查找树。...我就不卖关子了,直接给出2-3树的其中一个基本定义: 一棵2-3查找树或为一颗空树,或由以下节点组成: 2-节点:含有一个键和两条链接,左链接指向的2-3树中的键都小于该节点,右链接指向的2-3树中的键都大于该节点...3-节点:含有两个键和三条链接,左链接指向的2-3树中的键都小于该节点,中链接指向的2-3树中的键都位于该节点的两个键之间,右链接指向的2-3树中的键都大于该节点。 !!!...这思想很重要,因为后续的平衡二叉树算法都是基于这个原则实现的。原因也说了,如果不去时刻维护,要获得全局信息代价高昂且全局调整难度大于局部调整。...实现这些不仅需要大量的代码,而且它们所产生的额外开销可能会使算法比标准的二叉查找树更慢。平衡一棵树的初衷是为了消除最坏情况,但我们希望这种保障所需的代码能够越来越好。

    89220

    Java数据结构与算法解析(十)——2-3树

    平衡查找树的数据结构能够保证在最差的情况下也能达到lgN的效率,要实现这一目标我们需要保证树在插入完成之后始终保持平衡状态,这就是平衡查找树(Balanced Search Tree)。...2-3查找树概述 2-3树是最简单的B-树(或-树)结构,其每个非叶节点都有两个或三个子女,而且所有叶都在统一层上。2-3树不是二叉树,其节点可拥有3个孩子。不过,2-3树与满二叉树相似。...一棵2-3查找树或为一颗空树,或由以下节点组成: 1)2-节点:含有一个键和两条链接,左链接指向的2-3树中的键都小于该节点,右链接指向的2-3树中的键都大于该节点。...2)3-节点:含有两个键和三条链接,左链接指向的2-3树中的键都小于该节点,中链接指向的2-3树中的键都位于该节点的两个键之间,右链接指向的2-3树中的键都大于该节点。...下面是2-3查找树的效率: 最后贴上一张2-3树的构造过程:

    38410

    数据结构与算法——2-3树

    因此,引入了 2-3 树来提升效率。2-3 树本质也是一种平衡搜索树,但 2-3 树已经不是一棵二叉树了,因为 2-3 树允许存在 3 这种节点,3- 节点中可以存放两个元素,并且可以有三个子节点。...2-3 树定义 2-3 树的定义如下: (1)2-3 树要么为空要么具有以下性质: (2)对于 2- 节点,和普通的 BST 节点一样,有一个数据域和两个子节点指针,两个子节点要么为空,要么也是一个2...(4)所有叶子点都在树的同一层。 2-3树查找 2-3 树的查找类似二叉搜索树的查找过程,根据键值的比较来决定查找的方向。 例如在图 2.1 所示的 2-3 树中查找键为H的节点: ?...img 2-3树为满二叉树,删除叶子节点 操作步骤:若2-3树是一颗满二叉树,将2-3树层树减少,并将当前删除节点的兄弟节点合并到父节点中,同时将父节点的所有兄弟节点合并到父节点的父节点中,如果生成了4...但是2-3树需要维护两种不同类型的结点,查找和插入操作的实现需要大量的代码,而且它们所产生的额外开销可能会使算法比标准的二叉查找树更慢。 今日问题: 大家的开工状态怎么样? ?

    66510

    字典树(前缀树)_字典树java实现

    什么是字典树? 叫前缀树更容易理解 字典树的样子 Trie又被称为前缀树、字典树,所以当然是一棵树。...上面这棵Trie树包含的字符串集合是{in, inn, int, tea, ten, to}。每个节点的编号是我们为了描述方便加上去的。树中的每一条边上都标识有一个字符。...其实上Trie树的创建是从只有根节点开始,通过依次将W1, W2, W3, … WN插入Trie中实现的。所以关键就是之前提到的Trie的插入操作。...综上所述,在Trie树中查找一个字符串的伪代码如下: 代码实现 数组方式实现 要写代码实现一个Trie首先就要确定如何存储一个Trie结构。...简单实现 #include #include #include using namespace std; const int MAX_NODE =

    1.1K20

    算法和数据结构: 八 平衡查找树之2-3树

    本文及后面文章介绍的平衡查找树的数据结构能够保证在最差的情况下也能达到lgN的效率,要实现这一目标我们需要保证树在插入完成之后始终保持平衡状态,这就是平衡查找树(Balanced Search Tree...本文首先介绍2-3查找树(2-3 Search Tree),后面会在此基础上介绍红黑树和B树。 定义 和二叉树不一样,2-3树运行每个节点保存1个或者两个的值。...所以只需要常数次操作即可完成2-3树的平衡。 ? 性质 这些本地操作保持了2-3树的平衡。对于4-node节点变形为2-3节点,变形前后树的高度没有发生变化。...实现 直接实现2-3树比较复杂,因为: 需要处理不同的节点类型,非常繁琐 需要多次比较操作来将节点下移 需要上移来拆分4-node节点 拆分4-node节点的情况有很多种 2-3查找树实现起来比较复杂,...在2-3查找树基础上改进的红黑树不仅具有较高的效率,并且实现起来较2-3查找树简单。 但是2-3查找树作为一种比较重要的概念和思路对于后文要讲到的红黑树和B树非常重要。

    91120

    动画 | 什么是2-3树?(修改删除操作方式)

    2-3树正是一种绝对平衡的树,任意节点到它所有的叶子节点的深度都是相等的。 2-3树的数字代表一个节点有2到3个子树。它也满足二分搜索树的基本性质,但它不属于二分搜索树。...2-3树定义 一颗2-3树或为一颗空树,或有以下节点组成: 2-节点,含有一个元素和两个子树(左右子树),左子树所有元素的值均小于它父节点,右子树所有元素的值均大于它父节点; 3-节点,还有两个元素和三个子树...2-3树查找元素 2-3树的查找类似二分搜索树的查找,根据元素的大小来决定查找的方向。...如果达到树根节点还是4-节点,则进行分解根节点,此时树高+1(只有分解根节点才会增加树高),下面动画2-3树插入会出这个例子。 ?...动画:2-3树插入 2-3树删除 算法4红黑树删除最小键这一小结里没有特别详细地介绍,但给到了沿着左链接向下进行变换的三种情况: 1. 如果左子节点不是2-节点,完成; 2.

    1.7K30

    三分钟基础知识:什么是 2-3 树?

    因此,引入了 2-3 树来提升效率。2-3 树本质也是一种平衡搜索树,但 2-3 树已经不是一棵二叉树了,因为 2-3 树允许存在 3 这种节点,3- 节点中可以存放两个元素,并且可以有三个子节点。...2-3 树定义 2-3 树的定义如下: (1)2-3 树要么为空要么具有以下性质: (2)对于 2- 节点,和普通的 BST 节点一样,有一个数据域和两个子节点指针,两个子节点要么为空,要么也是一个2...(4)所有叶子点都在树的同一层。 2-3树查找 2-3 树的查找类似二叉搜索树的查找过程,根据键值的比较来决定查找的方向。 例如在图 2.1 所示的 2-3 树中查找键为H的节点: ?...img 2-3树为满二叉树,删除叶子节点 操作步骤:若2-3树是一颗满二叉树,将2-3树层树减少,并将当前删除节点的兄弟节点合并到父节点中,同时将父节点的所有兄弟节点合并到父节点的父节点中,如果生成了4...但是2-3树需要维护两种不同类型的结点,查找和插入操作的实现需要大量的代码,而且它们所产生的额外开销可能会使算法比标准的二叉查找树更慢。

    71220

    哈夫曼树(郝夫曼树)及java实现

    哈夫曼树是美国数学家Huffman发现的一种数据结构,该数据结构用在哈夫曼编码中,哈夫曼编码是一种压缩算法,本文主要针对的是哈夫曼树这种数据结构,哈夫曼编码将在下篇博文中涉及。...在正式开始了解哈夫曼树之前有几个概念需要了解: 1、路径长度:从树种一个节点到另一个节点间的分支构成两个节点之间的路径,路径上的分支数目就是路径长度,所以路径长度是针对两个节点间距离的一种描述,如下图所示...,ln},该树的带权路径长度WPL则为根节点到其他所有节点带权路径长度之和,即WPL=∑ wk*lk,k从1到n 3、WPL最小时对应的二叉树被称为哈夫曼树,也叫做最优二叉树。...有了上面的基础知识介绍,下面给出一种java实现: public class HuffmanTreeDemo { @Test public void test(){ Queue...q.add(n); } //最后一个节点就是根节点 Node root = q.poll(); //打印哈夫曼树

    47410

    扫码

    添加站长 进交流群

    领取专属 10元无门槛券

    手把手带您无忧上云

    扫码加入开发者社群

    相关资讯

    热门标签

    活动推荐

      运营活动

      活动名称
      广告关闭
      领券