Java数据结构——2-3树】的更多相关文章

一.树的概念  除根节点外,其余节点有且只有一个父节点. 1.度 节点的度:每个节点的子节点个数. 树的度:树内各个节点的度的最大值. 树的高度(深度):树中节点的最大层次称为树的深度. 节点路径:一个节点到另外一个节点的连线(树种该路径有且只有一条).例如:B到J节点如果有两条路径,那么该结构就不是树. 子树:除根节点外的节点就是子树. 叶子结点:一棵树当中没有子结点的结点称为叶子结点(即度为0的节点),简称“叶子”.  堂兄弟节点:双亲在同一层的节点互为堂兄弟: 二树的分类 顺序分: 有序树…
从这里始将要继续进行Java数据结构的相关讲解,Are you ready?Let's go~~ Java中的数据结构模型可以分为一下几部分: 1.线性结构 2.树形结构 3.图形或者网状结构 接下来的几章,我们将会分别讲解这几种数据结构,主要也是通过Java代码的方式来讲解相应的数据结构. 今天要讲解的是:Java线性结构 对于之前普通树和二叉树的讲解请参考地址: 今天我们将要进行的是Java树中的哈夫曼树(HaffmanTree),哈夫曼编码(HaffmanTreeCode),排序二叉树 和…
从这里开始将要进行Java数据结构的相关讲解,Are you ready?Let's go~~ Java中的数据结构模型可以分为一下几部分: 1.线性结构 2.树形结构 3.图形或者网状结构 接下来的几章,我们将会分别讲解这几种数据结构,主要也是通过Java代码的方式来讲解相应的数据结构. 今天要讲解的是:Java线性结构 Java数据结构之树形结构 之前我们前几章学习的都是Java数据结构的线性结构,都是一对一的,从现在开始我们将要学习Java的树形结构. 树对于我们来普通Java程序员而言,…
Q1: 什么是2-3-4树? A1: 在介绍2-3-4树之前,我们先说明二叉树和多叉树的概念. 二叉树:每个节点有一个数据项,最多有两个子节点. 多叉树:(multiway tree)允许每个节点有更多的数据项和更多的子节点.在多叉树中,节点的数据项是按关键字升序排列. A1: 2-3-4树就是多叉树,它的每个节点最多有3个数据项和4个子节点. 2-3-4树中的2.3.4的含义是指一个节点可能包含的子节点的个数. 对非叶节点有三种可能的情况: 1) 有1个数据项的节点总是有2个子节点 2) 有2…
Java数据结构和算法(七)B+ 树 数据结构与算法目录(https://www.cnblogs.com/binarylei/p/10115867.html) 我们都知道二叉查找树的查找的时间复杂度是 O(logN),其查找效率已经足够高了,那为什么还有 B 树和 B+ 树的出现呢?难道它两的时间复杂度比二叉查找树还小吗?答案当然不是, B 树和 B+ 树的出现是因为另外一个问题,那就是磁盘 IO. 一.计算机中数据的存储原理 页是计算机管理存储的逻辑块,硬件及操作系统往往将主存和磁盘存储区分割…
Java数据结构和算法(一)树 数据结构与算法目录(https://www.cnblogs.com/binarylei/p/10115867.html) 前面讲到的链表.栈和队列都是一对一的线性结构,这节讲一对多的线性结构 - 树.「一对多」就是指一个元素只能有一个前驱,但可以有多个后继. 一.树的基本概念 度(Degree) :节点拥有的子树数.树的度是树中各个节点度的最大值. 节点 :度为 0 的节点称为叶节点(Leaf)或终端节点.度不为 0 的节点称为分支节点.除根节点外,分支节点也被称…
Java数据结构和算法(四)赫夫曼树 数据结构与算法目录(https://www.cnblogs.com/binarylei/p/10115867.html) 赫夫曼树又称为最优二叉树,赫夫曼树的一个最主要的应用就是赫夫曼编码. 一.赫夫曼编码 can you can a can as a can canner can a can. 1.1 定长编码 99 97 110 32 121 111 117 32 99 97 110 32 97 32 99 97 110 32 97 115 32 97…
Java数据结构和算法(二)树的基本操作 数据结构与算法目录(https://www.cnblogs.com/binarylei/p/10115867.html) 一.树的遍历 二叉树遍历分为:前序遍历.中序遍历.后序遍历.即父结点的访问顺序 1.1 前序遍历 基本思想:先访问根结点,再先序遍历左子树,最后再先序遍历右子树即根-左-右.图中前序遍历结果是:1,2,4,5,7,8,3,6. // 递归实现前序遍历 public void preOrder() { System.out.printf…
上一篇我们大概了解了红黑树到底是个什么鬼,这篇我们可以看看另外一种树-----2-3-4树,看这个树的名字就觉得很奇怪.... 我们首先要知道这里的2.3.4指的是任意一个节点拥有的子节点个数,所以我们就大概知道2-3-4树中的每一个节点应该最多有四个子节点:注意:2-3-4树中的任意一个节点不能只有一个子节点,应该只有几种情况:0.2.3.4 有个东西一直忘记说了,就是那个大O表示法,或者叫做时间复杂度,感觉最开始不要纠结于用这个大O表示法比较好,因为直接看这个你会觉得很蒙,学了一定的数据结构…
1.树:树通常结合了有序数组和链表的优点,在树中查找数据项的速度和在有序数组中查找一样快,并且插入数据项和删除数据项的速度也和链表一样快. 2.树由边连接的节点而构成.节点一般代表着一些实体,节点间的直线表示关联节点间的路径,java中通常用引用来表示路径(c等一般是指针), 2-1.树的图: 3.树有很多种,这里讨论一种特殊的树---二叉树,二叉树的节点最多有两个子节点.更普遍的树中子节点的个数可以多于两个.这种树称为多路树. 3.1.树的术语: 路径:设想一个沿着连接节点的边从一个节点走到另…
在上篇博客中,学习了二分搜索树:Java数据结构和算法(六)--二叉树,但是二分搜索树本身存在一个问题: 如果现在插入的数据为1,2,3,4,5,6,这样有序的数据,或者是逆序 这种情况下的二分搜索树和链表几乎完全一样,是最不平衡的二叉树了,二分搜索树的效率直接降到最低 如何解决上述问题: 使二分搜索树保持平衡二叉树的特征,而今天要讲述的AVL树是最经典的平衡二叉树了 满二叉树: 除了叶子节点其余节点都有左右两个子节点的树 完全二叉树: 对于一个树高为h的二叉树,如果其第0层至第h-1层的节点都…
以下内容主要来自大话数据结构之中,部分内容参考互联网中其他前辈的博客,主要是在自己理解的基础上进行记录. 图的定义 图是由顶点的有穷非空集合和顶点之间边的集合组成,通过表示为G(V,E),其中,G标示一个图,V是图G中顶点的集合,E是图G中边的集合. 无边图:若顶点Vi到Vj之间的边没有方向,则称这条边为无项边(Edge),用序偶对(Vi,Vj)标示. 有向图:若从顶点Vi到Vj的边是有方向的,则成这条边为有向边,也称为弧(Arc).用有序对(Vi,Vj)标示,Vi称为弧尾,Vj称为弧头.如果任…
在Java数据结构和算法(五)——队列中我们介绍了优先级队列,优先级队列是一种抽象数据类型(ADT),它提供了删除最大(或最小)关键字值的数据项的方法,插入数据项的方法,优先级队列可以用有序数组来实现,这种实现方式尽管删除最大数据项的时间复杂度为O(1),但是插入还是需要较长的时间 O(N),因为每次插入平均需要移动一半的数据项,来保证插入后,数组依旧有序. 本篇博客我们介绍另外一种数据结构——堆,注意这里的堆和我们Java语言,C++语言等编程语言在内存中的“堆”是不一样的,这里的堆是一种树,…
堆的介绍 Q: 什么是堆? A: 这里的“堆”是指一种特殊的二叉树,不要和Java.C/C++等编程语言里的“堆”混淆,后者指的是程序员用new能得到的计算机内存的可用部分 A: 堆是有如下特点的二叉树: 1) 是一棵完全二叉树 2) 通常由数组实现.前面介绍了如何用数组表示树 3) 堆中的每个节点都满足堆的条件,即每个节点的关键字都大于(或等于)这个节点的子节点关键字 下图显示了堆与实现它的数组之间的关系:  A: 堆是完全二叉树的事实说明了表示堆的数组中没有“洞”,从下标0到N-1,每个元素…
前言 数据结构可划分为线性结构.树型结构和图型结构三大类.前面几篇讨论了数组.栈和队列.链表都是线性结构.树型结构中每个结点只允许有一个直接前驱结点,但允许有一个以上直接后驱结点.树型结构有树和二叉树(Binary Tree)两种,二叉树最多只允许有两个直接后继结点的有序树. 本篇将学习树的用途.运行机制以及创建树的方法. 为什么使用二叉树 Q: 为什么要用到树? A: 因为它通常结合了另外两种数据结构的优点:1)有序数组 2)链表.在树中查找数据项的速度和在有序数组中查找一样快,并且插入数据项…
三角数字 Q: 什么是三角数字? A: 据说一群在毕达哥拉斯领导下工作的古希腊的数学家,发现了在数学序列1,3,6,10,15,21,……中有一种奇特的联系.这个数列中的第N项是由第N-1项加N得到的. 由此,第二项是由第一项(1)加上2,得3.第三项是由第二项(3)加上3得到6,依次类推. 这个序列中的数字被称为三角数字,因为它们可以被形象化地表示成对象的一个三角形排列.  Q: 如何使用循环求第N项? A: 示例:TriangleNumber.java Q: 如何使用递归求第N项? A: 导…
Q: 栈.队列与数组的区别? A: 本篇主要涉及三种数据存储类型:栈.队列和优先级队列,它与数组主要有如下三个区别: A: (一)程序员工具 数组和其他的结构(栈.队列.链表.树等等)都适用于数据库应用中作为数据记录.它们常用于记录那些对应于现实世界的对象和活动的数据,如职员档案等,这些结构便于数据的访问:它们易于进行插入.删除和查找特定数据项的操作. 然而,本篇要讲解的数据结构和算法更多的是作为程序员的工具来运用.它们主要作为构思算法的辅助工具,而不是完全的数据存储工具.这些数据结构的生命周期…
Q: 为什么要学习数据结构与算法? A: 如果说Java语言是自动档轿车,C语言就是手动档吉普.数据结构呢?是变速箱的工作原理.你完全可以不知道变速箱怎样工作,就把自动档的车子从1档开到4档,而且未必就比懂得的人慢.写程序这件事,和开车一样,经验可以起到很大作用,但如果你不知道底层是怎么工作的,就永远只能开车,既不会修车,也不能造车.如果你对这两件事都不感兴趣也就罢了,数据结构懂得用就好.但若你此生在编程领域还有点更高的追求,数据结构是绕不开的课题. Java 替你做了太多事情,那么多动不动还支…
Q: 什么是外部存储? A: 外部存储特指某类磁盘系统,例如在大多数台式电脑或服务器中的硬盘. Q: 如何访问外部存储? A: 我们所学的数据结构都是假设数据存储在内存中,但是,在很多情况下要处理的数据量太大,不能都存储在内存中.这种情况下需要另一种存储方式,访问外部磁盘文件上的数据.外部磁盘存储的缺点就是读写比内存要慢得多,因此需要用一个合理的数据结构技术来管理它们. A: 作为外部存储的一个例子,假设编写一个数据库程序来管理一个电话簿,可能有500000条记录.每条记录包括姓名.地址.电话号…
JAVA常用数据结构及原理分析  http://www.2cto.com/kf/201506/412305.html 前不久面试官让我说一下怎么理解java数据结构框架,之前也看过部分源码,balabala讲了一堆,现在总结一下. java.util包中三个重要的接口及特点:List(列表).Set(保证集合中元素唯一).Map(维护多个key-value键值对,保证key唯一). 其不同子类的实现各有差异,如是否同步(线程安全).是否有序.常用类继承树: 以下结合源码讲解常用类实现原理及相互之…
转:常见Java数据结构&优缺点 - /画家/ - 博客园http://www.cnblogs.com/earl-yongchang/p/5639161.html 图片也是引用过来的,没有重新上传     数组     优点:查询快,如果知道索引可以快速地存取   缺点:删除慢,大小固定     有序数组   优点:比无序数组查找快   缺点:删除和插入慢,大小固定   栈   优点:提供后进先出的存取方式   缺点:存取其他项很慢   队列   优点:提供先进先出的存取方式   缺点:存取其他…
Java数据结构和算法(五)二叉排序树(BST) 数据结构与算法目录(https://www.cnblogs.com/binarylei/p/10115867.html) 二叉排序树(Binary Sort Tree),又称二叉查找树(Binary Search Tree),亦称二叉搜索树. 二叉排序树的左子树的节点都小于它的父节点,右子树中的节点都大于它的父节点,因此若按按中序遍历则从小到大的排序 二叉排序树在搜索中的应用非常广泛,同时二叉排序树的一个变种(红黑树)是 java 中 TreeM…
Java数据结构和算法(二)顺序存储的树结构 数据结构与算法目录(https://www.cnblogs.com/binarylei/p/10115867.html) 二叉树也可以用数组存储,可以和完全二叉树的节点一一对应. 一.树的遍历 // 二叉树保存在数组中 int[] data; public void preOrder() { preOrder(0); } // 前序遍历指定的节点 public void preOrder(int index) { System.out.printf(…
Java数据结构和算法(三)顺序存储的树结构 二叉树也可以用数组存储,可以和完全二叉树的节点一一对应. 一.树的遍历 // 二叉树保存在数组中 int[] data; public void preOrder() { preOrder(0); } // 前序遍历指定的节点 public void preOrder(int index) { System.out.printf(data[index] + " "); int leftIndex = 2 * index + 1; int r…
在我们学习Java的时候,很多人会面临我不知道继续学什么或者面试会问什么的尴尬情况(我本人之前就很迷茫).所以,我决定通过这个开源平台来帮助一些有需要的人,通过下面的内容,你会掌握系统的Java学习以及面试的相关知识.本来是想通过Gitbook的形式来制作的,后来想了想觉得可能有点大题小做.另外,我自己一个人的力量毕竟有限,希望各位有想法的朋友可以提issue和pull. ---–最新更新5/9/16:00---- Java面试通关手册(Java学习指南)github 地址:https://gi…
第一章 什么是数据结构和算法 数据结构的概述 数据结构是指 数据再计算机内存空间或磁盘空间中的组织形式 1.数据结构的特性 数据结构 优点 缺点 数组 插入快,如果知道下标可以快速存取 查找和删除慢  大小固定 有序数组 比无序数组查找快 插入和删除慢 大小固定 栈 后进先出 存取其他项很慢 队列 先进先出 存取其他项很慢 链表 插入和删除快 查找慢 二叉树 查找,插入,删除都快(如果保持平衡) 删除算法复杂 红黑树 查找,插入,删除都快 树总是是平衡的 算法复杂 2-3-4树 查找,插入,删除…
这篇我们说说堆这种数据结构,其实到这里就暂时把java的数据结构告一段落,感觉说的也差不多了,各种常见的数据结构都说到了,其实还有一种数据结构是“图”,然而暂时对图没啥兴趣,等有兴趣的再说:还有排序算法,emmm....有时间再看看吧! 其实从写数据结构开始到现在让我最大的感触就是:新手刚开始还是不要看数据结构为好,太无聊太枯燥了,很容易让人放弃:可以等用的各种框架用得差不多了之后,再回头静下心来搞搞数据结构还是挺有趣的:废话不多说,开始今天的内容: 1.二叉树分类 树分为二叉树和多叉树,其实吧…
这一篇我们来看看红黑树,首先说一下我啃红黑树的一点想法,刚开始的时候比较蒙,what?这到底是什么鬼啊?还有这种操作?有好久的时间我都缓不过来,直到我玩了两把王者之后回头一看,好像有点儿意思,所以有的时候碰到一个问题困扰了很久可以先让自己的头脑放松一下,哈哈! 不瞎扯咳,开始今天的正题: 前提:看红黑树之前一定要先会搜索二叉树 1.红黑树的概念 红黑树到底是个什么鬼呢?我最开始也在想这个问题,你说前面的搜索二叉树多牛,各种操作效率也不错,用起来很爽啊,为什么突然又冒出来了红黑树啊? 确实,搜索二…
对于树这个数据结构,第一次看到这个树肯定是一脸蒙逼,玛德,树?种树的那个树么?哈哈哈,当然不是,前面我们说过数组添加.删除数据很慢,查询数据很快:而链表添加.删除数据很快,但是查找数据很慢,我们就想啊,有没有一种数据结构取二者之精华,那不就是一个添加,删除,查询都很快的数据结构吗?那用起来多舒服啊! 这个取二者之精华的数据结构就是树(tree),而且随着各种大佬对树这种结构的改进,就有了很多种树,常见的有二叉树,红黑树,2-3-4树等各种树,我们就一起看看这几种简单树到底是什么鬼! 1.树的基本…
什么是树? 上面图例就是一个树,用圆代表节点,连接圆的直线代表边.树的顶端总有一个节点,通过它连接第二层的节点,然后第二层连向更下一层的节点,以此递推 ,所以树的顶端小,底部大.和现实中的树是相反的,但是代码一般从顶点开始执行操作 本文会讲述一种特殊的树--二叉树,每个节点最多有两个子节点.普通的树,节点可以多于两个,称为多路树/多叉树 树的术语: 1.路径:顺着节点的边从一个节点走到另一个节点,所经过的节点的顺序排列就称为“路径” 2.根:树顶端的节点称为根.一棵树只有一个根,如果要把一个节点…