首页
学习
活动
专区
圈层
工具
发布
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    AVL树(Java语言)

    平衡二叉树 平衡二叉树也叫平衡二叉查找树,又被称为AVL树,可以保证查询效率较高。它的特点是:它是一棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。...显然,对一棵AVL树而言,其所有结点的平衡因子只能是-1,0,1.挡在一棵AVL树上插入一个结点时,有可能导致失衡,即出现绝对值大于1的平衡因子。...return 0; } else { return right.height(); } } //返回以该节点为根节点的树的高度...System.out.println(avl.root.leftHeight()); System.out.println(avl.root.rightHeight()); } } 二叉排序树的运行结果...: AVL树的运行结果: 从以上两个运行结果可以看出:树的高度、树的左、右子树高度经过处理后,原来的二叉排序树变为了一棵AVL树。

    59120

    哈夫曼树(Java)

    哈夫曼树:其实就是一个压缩算法,类似于最优解 例子: 有一次考试成绩分为4个等级:A、B、C、D,班级有100人,其中获得A的人数为20人,获得B为40人,获得C为10人,获得D为30人。...一共为: 40 * 1 + 30 * 2 + 20 * 3 + 10 *4 = 200 结果很明显:第二种判断的次数少 哈夫曼树就是基于这个思想而来的,真正存放值的都为叶子节点(重要),把出现次数几率越高的越靠近根节点...,哈夫曼树主要是构建过程,他构建效率是比较低的。...节点多了权重,就是出现几率,我们对权重关心,对值并不关心 1.构建时,将数组按权重排序 2.每次从数组里取出前两个作为树的左孩子和右孩子,构建一个节点,节点的权重为两者之和 3.将节点的权重放入数组...,重新按权重排序 4.循环第2步 当数组只剩一个元素,将它作为根节点 作用:二进制表示每个节点的值,所占空间最少 手写哈夫曼树: /** * 哈夫曼 */ static

    63420

    java源码之树与二叉树

    树的定义 树(Tree)是n(n≥0) 个结点的有限集。n=0 时称为空树。...下图就是一棵树: ? 相关概念 结点分类 树的结点包含一个数据元素及若干指向其子树的分支。结点拥有的子树数称为结点的度(Degree) 。...树中结点的最大层次称为树的深度(Depth)或高度 。 ? 有序树,无序树 如果将树中结点的各子树看成从左至右是有次序的,不能互换的,则称该树为有序树,否则称为无序树。...二叉树 二叉树(Binary Tree)是n(n ≥ 0) 个结点的有限集合,该集合或者为空集(称为空二叉树),或者由一个根结点和两棵互不相交的、分别称为根结点的左子树和右子树的二叉树组成。...二叉树遍历 二叉树的遍历(traversing binary tree)是指从根结点出发,按照某种次序依次访问二叉树中所有结点,使得每个结点被访问一次旦仅被访问一次。

    58440

    疯狂java笔记之树和二叉树

    树的概述 树是一种非常常用的数据结构,树与前面介绍的线性表,栈,队列等线性结构不同,树是一种非线性结构 1.树的定义和基本术语 计算机世界里的树,是从自然界中实际的树抽象而来的,它指的是N个有父子关系的节点的有限集合...树的深度(depth):树中节点的最大层次值称为树的深度或高度。 有序树与无序树:如果将树中节点的各棵子树看成从左到右是有序的(即不能互换),则称该树为有序树,否则称为无序树。...无序树的节点无左右之分,而二叉树的节点有左,右之分,也就是说,二叉树是有序树。 一棵深度为k的二叉树,如果它包含了 2^k-1 个节点,就把这棵二叉树称为满二叉树。满二叉树的特点是。...为了充分利用二义树的简单易用性,可以将普通树转换为二叉树,以二叉树的形式来保存柞通树,当程序需要树时,再将悦义树转换为普通树。 森林其实更简单,如果将一棵伶通树的根节点去掉,这棵树就变成了森林。...java实现的红黑树结构如下图: ?

    1.4K20

    Java - 数据结构之树

    ** ● 树的深度(Depth of tree):树中结点的最大层次。树的高度等于树的深度。 ● 无序树:树中任意结点的子结点之间没有顺序关系,这种树称为无序树,也称为自由树。...孩子兄弟表示法可以把一颗复杂的树变成一颗二叉树。 树的双亲表示法,孩子表示法以及孩子兄弟表示法 二叉树(Binary Tree) 每个结点最多只能有两个子结点的树,即为二叉树。...相对地,所有结点都只有右子树的二叉树,叫右斜树。斜树相当于树结构退化成了链表。 完美二叉树(Perfect Binary Tree) 有些资料将完美二叉树翻译为满二叉树,区别于完满二叉树。...AVL树是最早发明的自平衡二叉查找树,是最原始典型的平衡二叉树。AVL指的是发明该树的两个作者名字的简称,通常说的平衡二叉树指的是AVL树。...30张图带你彻底理解红黑树 红黑树是一种应用很广的数据结构,Java的TreeSet和TreeMap底层就使用了红黑树。红黑树是一棵完满二叉树。

    51720

    Java 二叉树

    什么是二叉树 二叉树是一种特殊的树,在二叉树中每个节点最多有两个子节点,一般称为左子节点和右子节点,并且二叉树的子树有左右之分,其次序不能任意颠倒。...通过这种生长方式,我们无论何时都能得到满足前面三个要素的二叉树。...两种特殊的二叉树 满二叉树 在一棵二叉树中,如果所有分支结点都有左子结点和右子结点,并且叶子结点都集中在二叉树的最下层,这样的树叫做满二叉树 完全二叉树 若二叉树中最多只有最下面两层的结点的度数可以小于...image.png 创建一个满二叉树 ?...截屏2021-05-28 14.54.06.png 如图Java创建一个满二叉树 1.新建一个TreeNode类 public class TreeNode { private String

    80910

    java实现哈弗曼树

    树的路径长度:从树根到每一个结点的路径长度之和,我们所说的完全二叉树就是这种路径长度最短的二叉树。 3....树的带权路径长度:如果在树的每一个叶子结点上赋上一个权值,那么树的带权路径长度就等于根结点到所有叶子结点的路径长度与叶子结点权值乘积的总和。...5*2+2*3+4*3=35 很明显,第三棵树的带权路径最短(不信的小伙伴可以试一试,要是能找到更短的,估计能拿图灵奖了),这就是我们所说的“最优二叉树(哈弗曼树)”,它的构建方法很简单,依次选取权值最小的结点放在树的底部...java代码 原理说完了,接下来是代码实现了。 首先需要有个节点类来存放数据。...1 package huffman; 2 3 import java.io.*; 4 import java.util.*; 5 6 public class Huffman {

    65010

    哈夫曼树(郝夫曼树)及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(); //打印哈夫曼树

    63310

    (JAVA)B树和B+树的实现原理阐述

    B 树 2-3树中,一个节点最多能有两个key,它的实现红黑树中适用对链接染色的方式去表达这两个key。下面将学习另一种树形结构B树,这种数据结构中,一个节点允许多余两个key的存在。...我们选择一个参数 M 来构造一个B树,我们可以把它称作是 M阶 的B树,那么该树具有以下特点: 每个节点最多右M-1个key,并且以升序排列: 每个节点最优能有M个子节点; 根节点至少有两个子节点 1.2...B树存储数据 若参数 M 选择为5,那么每个节点最多包含4个键值对,我们已5阶B树为例,看看B树的数据存储过程 1.3 B 树中删除数据 (a)原始状态 (b)在上图的树中,删除21 由于删除21后的结点的索引值个数仍然大于...B+树 B+树是对B树的一种变形树,它与B树的差异在于: 非叶节点仅具有索引作用,也就是说,非叶子节点只存储key,不存储value; 树的所有叶节点构成一个有序链表,可以按照key排序的次序遍历全部数据...2.1 B+树存储数据 若参数M选择为5那么每个节点最多包含4个键值对,我们以5阶B+树为例,看看B+树的数据存储过程 2.2 B+树和B树的对比 2.2.1 B+ 树的优点:(存储好,查找具有最坏情况

    25210
    领券