java数据结构和算法
小志的博客
随笔笔记,仅供参考
展开
-
java数据结构和算法——马踏棋盘算法
目录一、马踏棋盘算法介绍二、骑士周游问题的思路分析一、马踏棋盘算法介绍马踏棋盘算法也被称为骑士周游问题将马随机放在国际象棋的8×8棋盘Board[0~7][0~7]的某个方格中,马按走棋规则(马走日字)进行移动。要求每个方格只进入一次,走遍棋盘上全部64个方格二、骑士周游问题的思路分析创建棋盘 chessBoard , 是一个二维数组将当前位置设置为已经访问,然后根据当前位置,计算马儿还能走哪些位置,并放入到一个集合中(ArrayList), 最多有8个位置, 每走一步,就使用step+原创 2020-12-14 20:35:23 · 505 阅读 · 0 评论 -
java数据结构和算法——弗洛伊德(Floyd)算法
目录一、弗洛伊德(Floyd)算法介绍二、弗洛伊德算法 VS 迪杰斯特拉算法三、弗洛伊德(Floyd)算法过程四、弗洛伊德(Floyd)算法——应用场景(最短路径问题)五、弗洛伊德(Floyd)算法——解决最短路径问题思路图解六、弗洛伊德(Floyd)算法——解决最短路径问题的代码实现一、弗洛伊德(Floyd)算法介绍和Dijkstra算法一样,弗洛伊德(Floyd)算法也是一种用于寻找给定的加权图中顶点间最短路径的算法。该算法名称以创始人之一、1978年图灵奖获得者、斯坦福大学计算机科学系教授罗伯特原创 2020-12-09 22:51:03 · 515 阅读 · 0 评论 -
java数据结构和算法——迪杰斯特拉(Dijkstra)算法
一、迪杰斯特拉(Dijkstra)算法介绍迪杰斯特拉(Dijkstra)算法是典型最短路径算法,用于计算一个结点到其他结点的最短路径。 它的主要特点是以起始点为中心向外层层扩展(广度优先搜索思想),直到扩展到终点为止。二、迪杰斯特拉(Dijkstra)算法过程设置出发顶点为v,顶点集合V{v1,v2,vi…},v到V中各顶点的距离构成距离集合Dis,Dis{d1,d2,di…},Dis集合记录着v到图中各顶点的距离(到自身可以看作0,v到vi距离对应为di)从Dis中选择值最小的di并移出Di原创 2020-12-03 22:01:31 · 877 阅读 · 0 评论 -
java数据结构和算法——克鲁斯卡尔(Kruskal)算法
目录一、克鲁斯卡尔(Kruskal)算法介绍二、连通网的最小生成树理解三、克鲁斯卡尔(Kruskal)算法——应用场景(公交站问题)四、克鲁斯卡尔(Kruskal)算法图解五、克鲁斯卡尔(Kruskal)算法分析六、如何判断是否构成回路——示例说明七、克鲁斯卡尔(Kruskal)算法——代码实现一、克鲁斯卡尔(Kruskal)算法介绍克鲁斯卡尔(Kruskal)算法,是用来求加权连通图的最小生成树的算法。基本思想:按照权值从小到大的顺序选择n-1条边,并保证这n-1条边不构成回路。具体做法:首先构原创 2020-11-19 20:30:10 · 872 阅读 · 1 评论 -
java数据结构和算法——普里姆(prim)算法
目录一、普里姆(prim)算法的介绍二、最小生成树的介绍三、普里姆算法——应用场景(修路问题)四、普里姆算法——解决修路问题的思路图解五、普里姆算法——解决修路问题的代码实现一、普里姆(prim)算法的介绍普利姆(Prim)算法求最小生成树,也就是在包含n个顶点的连通图中,找出只有(n-1)条边包含所有n个顶点的连通子图,也就是所谓的极小连通子图普利姆的算法如下:1)、设G=(V,E)是连通网,T=(U,D)是最小生成树,V,U是顶点集合,E,D是边的集合2)、若从顶点u开始构造最小生成树,则从原创 2020-11-14 20:23:20 · 1109 阅读 · 0 评论 -
java数据结构和算法——贪心算法
目录一、贪心算法介绍二、贪心算法最佳应用——集合覆盖问题示例需求三、穷举法——实现合覆盖问题思路分析四、贪心算法——实现合覆盖问题思路分析五、贪心算法——实现合覆盖问题图解分析六、贪心算法——实现合覆盖代码示例一、贪心算法介绍贪婪算法(贪心算法)是指在对问题进行求解时,在每一步选择中都采取最好或者最优(即最有利)的选择,从而希望能够导致结果是最好或者最优的算法。贪婪算法所得到的结果不一定是最优的结果(有时候会是最优解),但是都是相对近似(接近)最优解的结果。二、贪心算法最佳应用——集合覆盖问题示原创 2020-11-09 20:57:09 · 359 阅读 · 0 评论 -
java数据结构和算法——KMP算法
一、KMP算法介绍KMP是一个解决模式串在文本串是否出现过,如果出现过,最早出现的位置的经典算法Knuth-Morris-Pratt 字符串查找算法,简称为 “KMP算法”,常用于在一个文本串S内查找一个模式串P 的出现位置,这个算法由Donald Knuth、Vaughan Pratt、James H. Morris三人于1977年联合发表,故取这3人的姓氏命名此算法.KMP方法算法就利用之前判断过信息,通过一个next数组,保存模式串中前后最长公共子序列的长度,每次回溯时,通过next数组找到,原创 2020-11-06 09:02:07 · 277 阅读 · 0 评论 -
java数据结构和算法——动态规划算法
目录一、动态规划算法介绍二、动态规划算法最佳实践-背包问题示例需求三、动态规划算法最佳实践-背包问题思路分析四、动态规划算法最佳实践-背包问题思路图解五、动态规划算法最佳实践-背包问题代码实现一、动态规划算法介绍动态规划(Dynamic Programming)算法的核心思想是:将大问题划分为小问题进行解决,从而一步步获取最优解的处理算法;动态规划算法与分治算法类似,其基本思想也是将待求解问题分解成若干个子问题,先求解子问题,然后从这些子问题的解得到原问题的解;动态规划算法与分治法不同的是,适合于原创 2020-11-03 08:42:26 · 400 阅读 · 0 评论 -
java数据结构和算法——暴力匹配算法
目录一、字符串匹配问题示例需求二、暴力匹配算法的思路三、暴力匹配算法——实现字符串匹配问题代码示例四、暴力匹配算法总结一、字符串匹配问题示例需求有一个字符串 str1= “天气很好啊 天气很好 今天天气很好啊非常好很好”,和一个子串 str2=“天气很好啊非常好”现在要判断 str1 是否含有 str2, 如果存在,就返回第一次出现的位置, 如果没有,则返回-1二、暴力匹配算法的思路假设现在str1匹配到 i 位置,子串str2匹配到 j 位置,则有:1)、如果当前字符匹配成功(即str1原创 2020-11-03 08:42:13 · 581 阅读 · 0 评论 -
java数据结构和算法——分治算法
目录一、分治算法的介绍二、分治算法可以求解的一些经典问题三、分治算法的基本步骤四、分治(Divide-and-Conquer)算法设计模式五、分治算法最佳实践-汉诺塔示例需求六、分治算法最佳实践-汉诺塔思路分析七、分治算法最佳实践-汉诺塔代码实现一、分治算法的介绍分治法是一种很重要的算法。字面上的解释是“分而治之”,就是把一个复杂的问题分成两个或更多的相同或相似的子问题,再把子问题分成更小的子问题……直到最后子问题可以简单的直接求解,原问题的解即子问题的解的合并。这个技巧是很多高效算法的基础,如排序原创 2020-10-30 21:40:32 · 293 阅读 · 0 评论 -
java数据结构和算法——二分查找算法(非递归方式实现)
一、二分查找算法的介绍二分查找又称为折半查找假设表中元素是按升序排列(必须是有序列表),将表中间位置记录的关键字与查找关键字比较如果两者相等,则查找成功;否则利用中间位置记录将表分成前、后两个子表,如果中间位置记录的关键字大于查找关键字则进一步查找前一子表;否则进一步查找后一子表。重复以上过程,直到找到满足条件的记录,使查找成功,或直到子表不存在为止,此时查找不成功。二、二分查找算法的示例需求数组 {1,3, 8, 10, 11, 67, 100}, 编程实现二分查找, 要求使用非递归的方原创 2020-10-30 21:39:49 · 259 阅读 · 0 评论 -
java数据结构和算法——图的广度优先(BFS)遍历
目录一、图的遍历介绍二、图的广度优先搜索(Broad First Search)三、图的广度优先遍历算法步骤四、图的广度优先遍历示例需求五、图的广度优先遍历代码示例一、图的遍历介绍所谓图的遍历,即是对结点的访问。一个图有那么多个结点,如何遍历这些结点,需要特定策略;一般有两种访问策略: (1)深度优先遍历; (2)广度优先遍历。二、图的广度优先搜索(Broad First Search)类似于一个分层搜索的过程,广度优先遍历需要使用一个队列以保持访问过的结点的顺序,以便按这个顺序来访问这些结原创 2020-10-29 22:05:39 · 1267 阅读 · 0 评论 -
java数据结构和算法——图的深度优先(DFS)遍历
目录一、图的遍历介绍二、图的深度优先搜索(Depth First Search)三、图的深度优先遍历算法步骤四、图的深度优先遍历示例需求五、图的深度优先遍历代码示例一、图的遍历介绍所谓图的遍历,即是对结点的访问。一个图有那么多个结点,如何遍历这些结点,需要特定策略,一般有两种访问策略: (1)深度优先遍历; (2)广度优先遍历。二、图的深度优先搜索(Depth First Search)深度优先遍历,从初始访问结点出发,初始访问结点可能有多个邻接结点,深度优先遍历的策略就是首先访问第一个邻接原创 2020-10-29 22:05:03 · 816 阅读 · 0 评论 -
java数据结构和算法——图的创建
一、示例要求代码实现如下图结构二、代码实现示例1、创建图的类package com.rf.springboot01.dataStructure.graph;import java.util.ArrayList;import java.util.Arrays;/** * @description: 定义一个图 类 * @author: xiaozhi * @create: 2020-10-27 21:58 */public class Graph { private原创 2020-10-29 22:04:33 · 642 阅读 · 0 评论 -
java数据结构和算法——图的基本介绍
目录一、为什么要有图二、图的举例说明三、图的常用概念四、图的表示方式一、为什么要有图线性表局限于一个直接前驱和一个直接后继的关系。树也只能有一个直接前驱也就是父节点。当我们需要表示多对多的关系时, 这里我们就用到了图。二、图的举例说明图是一种数据结构,其中结点可以具有零个或多个相邻元素。两个结点之间的连接称为边。 结点也可以称为顶点。如图:三、图的常用概念顶点(vertex):结点也可以称顶点。(如上图)边(edge):两个结点之间的连接。(如上图)路径:比如从原创 2020-10-24 07:42:04 · 301 阅读 · 0 评论 -
java数据结构和算法——B+树的介绍
一、B+树的介绍B+树是B树的变体,也是一种多路搜索树。二、B+树的图解三、B+树的说明B+树的搜索与B树也基本相同,区别是B+树只有达到叶子结点才命中(B树可以在非叶子结点命中),其性能也等价于在关键字全集做一次二分查找。所有关键字都出现在叶子结点的链表中(即数据只能在叶子节点【也叫稠密索引】),且链表中的关键字(数据)恰好是有序的。不可能在非叶子结点命中。非叶子结点相当于是叶子结点的索引(稀疏索引),叶子结点相当于是存储(关键字)数据的数据层。更适合文件索引系统。B树和B+树各原创 2020-10-24 07:40:43 · 392 阅读 · 0 评论 -
java数据结构和算法——B*树的介绍
一、B*树的介绍B*树是B+树的变体,在B+树的非根和非叶子结点再增加指向兄弟的指针。二、B*树的图解三、B*树的说明B*树定义了非叶子结点关键字个数至少为(2/3)*M,即块的最低使用率为2/3,而B+树的块的最低使用率为B+树的1/2。从第1个特点我们可以看出,B*树分配新结点的概率比B+树要低,空间使用率更高...原创 2020-10-24 07:39:57 · 255 阅读 · 0 评论 -
java数据结构和算法——B树的介绍
一、B树的概念B-tree树即B树,B即Balanced,平衡的意思。有人把B-tree翻译成B-树,容易让人产生误解。会以为B-树是一种树,而B树又是另一种树。实际上,B-tree就是指的B树。2-3树和2-3-4树他们就是B树(英语:B-tree 也写成B-树)二、B树的图解三、B树的说明B树的阶:节点的最多子节点个数。比如2-3树的阶是3,2-3-4树的阶是4。B-树的搜索: 从根结点开始,对结点内的关键字(有序)序列进行二分查找,如果命中则结束,否则进入查询关键字所属范围的儿子原创 2020-10-24 07:39:23 · 405 阅读 · 0 评论 -
java数据结构和算法——2-3树的介绍
一、2-3树的图解二、2-3树的特点2-3树是最简单的B树结构,具有如下特点:2-3树的所有叶子节点都在同一层。(只要是B树都满足这个条件)有两个子节点的节点叫二节点。二节点要么没有子节点,要么有两个子节点。有三个子节点的节点叫三节点。三节点要么没有子节点,要么有三个子节点。2-3树是由二节点和三节点构成的树。三、2-3树应用案例的需求示例需求:将数列{16, 24, 12, 32, 14, 26, 34, 10, 8, 28, 38, 20} 构建成2-3树,并保证数据插入的大小原创 2020-10-19 22:13:31 · 565 阅读 · 0 评论 -
java数据结构和算法——多叉树介绍
一、二叉树的问题分析1)、 二叉树的操作效率较高,但是也存在问题, 请看下面的二叉树2)、二叉树需要加载到内存的,如果二叉树的节点少,没有什么问题,但是如果二叉树的节点很多,就存在如下问题:在构建二叉树时,需要多次进行i/o操作(海量数据存在数据库或文件中),节点海量,构建二叉树时,速度有影响节点海量,也会造成二叉树的高度很大,会降低操作速度。二、多叉树的概念在二叉树中,每个节点有数据项,最多有两个子节点。如果允许每个节点可以有更多的数据项和更多的子节点,就是多叉树(multiway t原创 2020-10-19 21:34:16 · 929 阅读 · 0 评论 -
java数据结构和算法——平衡二叉树之双旋转
一、平衡二叉树的单旋转(即左旋转或者右旋转)问题分析某些情况下,单旋转不能完成平衡二叉树的转换。比如数列 { 10, 11, 7, 6, 8, 9 },图解如下:二、解决单旋转不能形成AVL树的思路分析(通过双旋转实现AVL树的思路分析图解)1)、当符号右旋转的条件时2)、如果它的左子树的右子树高度大于它的左子树的高度,如下图:3)、 先对当前这个结点的左节点进行左旋转(即下图中的值为7的节点进行左旋转),如下图: 4)、基于第3)步骤的基础上,再对当前结点进行右旋转的操作即可,如下图原创 2020-10-15 23:36:47 · 478 阅读 · 0 评论 -
java数据结构和算法——平衡二叉树之右旋转
目录1、平衡二叉树右旋转思路图解2、什么时候进行平衡二叉树右旋转3、平衡二叉树右旋转目的4、求二叉树高度代码示例5、平衡二叉树右旋转代码示例(基于求二叉树高度的基础上添加右旋转方法代码)1、平衡二叉树右旋转思路图解2、什么时候进行平衡二叉树右旋转当左子树与右子树高度差的绝对值大于1是进行右旋转3、平衡二叉树右旋转目的降低左子树高度4、求二叉树高度代码示例1)、创建一个节点类 Nodepackage com.rf.springboot01.dataStructure.avlTree;原创 2020-10-14 23:11:52 · 243 阅读 · 0 评论 -
java数据结构和算法——平衡二叉树之左旋转
1、平衡二叉树左旋转思路图解2、什么时候进行平衡二叉树左旋转当右子树与左子树高度差的绝对值大于1是进行左旋转3、平衡二叉树左旋转目的降低右子树高度原创 2020-10-13 23:58:03 · 746 阅读 · 0 评论 -
java数据结构和算法——平衡二叉树的介绍
一、二叉排序树可能存在的问题给你一个数列{1,2,3,4,5,6},要求创建一颗二叉排序树(BST), 并分析问题所在1、数列{1,2,3,4,5,6}构建的二叉排序树(BST)如下图:2、上图中二叉排序树(BST)存在的问题左子树全部为空,从形式上看,更像一个单链表插入速度没有影响查询速度明显降低(因为需要依次比较), 不能发挥BST的优势,因为每次还需要比较左子树,其查询速度比单链表还慢3、上图中二叉排序树(BST)存在问题的解决方案使用平衡二叉树(AVL)二、平衡二原创 2020-09-28 22:44:55 · 374 阅读 · 0 评论 -
java数据结构和算法——二叉排序树的删除
一、二叉排序树删除结点的思路图解第一种情况:删除叶子节点 (如下图的 2, 5, 9, 12 节点)第二种情况:删除只有一颗子树的节点 (如下图的 1 节点)第三种情况:删除有两颗子树的节点. (如下图的 7, 3, 10 节点 )...原创 2020-09-28 22:06:40 · 722 阅读 · 0 评论 -
java数据结构和算法——二叉排序树的创建、遍历
示例需求:给定一个数组 int[] arr = {7, 3, 10, 12, 5, 1, 9, 2},创建和遍历二叉排序树1、创建Node结点类package com.rf.springboot01.dataStructure.binarySortTree;/** * @description: 创建Node结点 * @author: xiaozhi * @create: 2020-09-27 21:48 */public class Node { public int va.原创 2020-09-27 22:29:44 · 332 阅读 · 0 评论 -
java数据结构和算法——二叉排序树的介绍
一、二叉排序树概念二叉排序树(Binary Sort Tree) 又叫二叉搜索树(Binary Search Tree),简称BST。对于二叉排序树的任何一个非叶子节点,要求左子节点的值比当前节点的值小,右子节点的值比当前节点的值大。如果有相同的值,可以将该节点放在左子节点或右子节点。二、数组构建成二叉排序树的示意图示例需求:把 int[] arr=(7, 3, 10, 12, 5, 1, 9) 构建成二叉排序树...原创 2020-09-27 22:29:33 · 609 阅读 · 0 评论 -
java数据结构和算法——赫夫曼编码解压文件
1、创建赫夫曼解码 工具类package com.rf.springboot01.dataStructure.huffmanCodeUnZipfile;import java.util.ArrayList;import java.util.HashMap;import java.util.List;import java.util.Map;/** * @description: 赫夫曼解码 工具类 * @author: xiaozhi * @create: 2020-09-25 22:原创 2020-09-27 22:29:09 · 237 阅读 · 0 评论 -
java数据结构和算法——赫夫曼编码压缩文件
1、创建节点类 Nodepackage com.rf.springboot01.dataStructure.huffmanCodeZipfile;/** * @description: 创建节点类 Node * 实现Comparable接口,并实现compareTo方法进行排序 * @author: xiaozhi * @create: 2020-09-25 22:56 */public class Node implements Comparable<原创 2020-09-27 22:28:26 · 257 阅读 · 0 评论 -
java数据结构和算法——赫夫曼解码
一、赫夫曼解码的思路赫夫曼编码压缩后的字节数组先转成赫夫曼编码对应的二进制的字符串把字符串按照指定的赫夫曼编码进行解码,解析成原来的字符串二、赫夫曼解码的代码示例示例需求:先把字符串进行赫夫曼编码,在把赫夫曼编码的结果进行赫夫曼解码。注:测试类中用到的赫夫曼编码工具类 参考此链接 https://blog.csdn.net/li1325169021/article/details/1087205231、创建赫夫曼解码 工具类package com.rf.springboot01.da原创 2020-09-27 22:27:43 · 246 阅读 · 0 评论 -
java数据结构和算法——赫夫曼编码
目录一、赫夫曼编码原理剖析的思路图解二、根据传入的字符串生成各个字符对应的个数代码示例三、根据字符出现的次数构建一颗赫夫曼树的代码示例四、根据传入的node结点的所有叶子结点得到赫夫曼编码的代码示例五、根据生成的赫夫曼编码,生成赫夫曼编码数据的代码示例一、赫夫曼编码原理剖析的思路图解输入一个字符串,如下:i like like like java do you like a java查找出各个字符对应的个数,如下:d:1 y:1 u:1 j:2 v:2 o:2 l:4 k:4 e原创 2020-09-22 23:22:10 · 416 阅读 · 0 评论 -
java数据结构和算法——赫夫曼编码的介绍
一、赫夫曼编码基本介绍赫夫曼编码也翻译为哈夫曼编码(Huffman Coding),又称霍夫曼编码,是一种编码方式, 属于一种程序算法。赫夫曼编码是赫哈夫曼树在电讯通信中的经典的应用之一。赫夫曼编码广泛地用于数据文件压缩。其压缩率通常在20%~90%之间。赫夫曼码是可变字长编码(VLC)的一种。Huffman于1952年提出一种编码方法,称之为最佳编码。二、赫夫曼编码原理剖析通信领域中信息的处理方式1——定长编码通信领域中信息的处理方式2——变长编码通信领域中信息的处理方式原创 2020-09-16 22:59:30 · 331 阅读 · 0 评论 -
java数据结构和算法——赫夫曼树
目录一、赫夫曼树的基本介绍二、赫夫曼树几个重要概念一、赫夫曼树的基本介绍给定n个权值作为n个叶子结点,构造一棵二叉树,若该树的带权路径长度(wpl)达到最小,称这样的二叉树为最优二叉树,也称为哈夫曼树(Huffman Tree), 还有的书翻译为霍夫曼树。赫夫曼树是带权路径长度最短的树,权值较大的结点离根较近。二、赫夫曼树几个重要概念路径和路径长度:在一棵树中,从一个结点往下可以达到的孩子或孙子结点之间的通路,称为路径。通路中分支的数目称为路径长度。若规定根结点的层数为1,则从根结点到第L层原创 2020-09-14 22:54:22 · 226 阅读 · 0 评论 -
java数据结构和算法——堆排序
一、堆排序基本介绍堆排序是利用堆这种数据结构而设计的一种排序算法,堆排序是一种选择排序,它的最坏,最好,平均时间复杂度均为O(nlogn),它也是不稳定排序。堆是具有以下性质的完全二叉树。每个结点的值都大于或等于其左右孩子结点的值,称为大顶堆。每个结点的值都小于或等于其左右孩子结点的值,称为小顶堆。注意 : 没有要求结点的左孩子的值和右孩子的值的大小关系。大顶堆图解如下:大顶堆特点:arr[i] >= arr[2i+1] && arr[i] >= arr[2i+2]原创 2020-09-08 22:57:30 · 398 阅读 · 0 评论 -
java数据结构和算法——线索化二叉树
一、二叉树问题分析1、将数列 {1, 3, 6, 8, 10, 14 } 构建成一颗二叉树,如下图:2、问题分析:当我们对上面的二叉树进行中序遍历时,数列为 {8, 3, 10, 1, 6, 14 }但是 6, 8, 10, 14 这几个节点的左右指针,并没有完全的利用上.如果我们希望充分的利用 各个节点的左右指针, 让各个节点可以指向自己的前后节点,怎么办?解决方案------>线索二叉树二、线索二叉树的基本介绍n个结点的二叉链表中含有n+1 【公式 2n-(n-1)=n+1原创 2020-09-03 23:43:09 · 258 阅读 · 0 评论 -
java数据结构和算法——顺序存储二叉树
一、二叉树的顺序存储介绍将二叉树存储在一个数组中,通过存储元素的下标反映元素之间的父子关系。二叉树的顺序存储就是用一组连续的存储单元存放二又树中的结点元素,一般按照二叉树结点自上向下、自左向右的顺序存储。需要注意的是:顺序存储只适用于完全二叉树。换句话说,只有完全二叉树才可以使用顺序表存储。因此,如果我们想顺序存储普通二叉树,需要提前将普通二叉树转化为完全二叉树。二、二叉树的顺序存储的图解三、二叉树的顺序存储特点顺序二叉树通常只考虑完全二叉树以下公式中用到的 n 表示二叉树中的第几原创 2020-09-02 21:57:33 · 384 阅读 · 0 评论 -
java数据结构和算法——二叉树删除节点
一、二叉树删除节点的思路图解二、二叉树删除节点的示例代码1、代码package com.rf.springboot01.dataStructure.tree;/** * @description: 二叉树删除节点示例 * @author: xiaozhi * @create: 2020-08-28 21:07 */public class BinaryTreeDemoThree { public static void main(String[] args) {原创 2020-08-30 21:08:49 · 509 阅读 · 0 评论 -
java数据结构和算法——二叉树的前序遍历、中序遍历和后序遍历查询指定节点
一、二叉树的前序遍历、中序遍历和后序遍历概念前序遍历: 先输出父节点,再遍历左子树和右子树中序遍历: 先遍历左子树, 再输出父节点,再遍历右子树后序遍历: 先遍历左子树,再遍历右子树, 最后输出父节点小结: 看输出父节点的顺序,就确定是前序遍历,中序遍历还是后序遍历二、二叉树的前序遍历、中序遍历和后序遍历查询指定节点的思路图解三、二叉树的前序遍历、中序遍历、后序遍历查询指定节点的需求请编写前序查找,中序查找和后序查找的方法并分别使用三种查找方式,查找 heroNO = 5 的节点并原创 2020-08-27 22:54:52 · 360 阅读 · 0 评论 -
java数据结构和算法——二叉树的前序遍历、中序遍历和后序遍历
一、前序遍历、中序遍历和后序遍历概念前序遍历: 先输出父节点,再遍历左子树和右子树中序遍历: 先遍历左子树, 再输出父节点,再遍历右子树后序遍历: 先遍历左子树,再遍历右子树, 最后输出父节点小结: 看输出父节点的顺序,就确定是前序遍历,中序遍历还是后序遍历二、前序遍历、中序遍历和后序遍历的思路图解三、前序遍历、中序遍历和后序遍历的代码示例...原创 2020-08-27 21:21:50 · 384 阅读 · 0 评论 -
java数据结构和算法——二叉树的介绍
一、为什么需要树这种数据结构1、数组存储方式的分析优点:通过下标方式访问元素,速度快。对于有序数组,还可使用二分查找提高检索速度。缺点:如果要检索具体某个值,或者插入值(按一定顺序)会整体移动,效率较低2、链式存储方式的分析优点:在一定程度上对数组存储方式有优化(比如:插入一个数值节点,只需要将插入节点,链接到链表中即可, 删除效率也很好)缺点:在进行检索时,效率仍然较低,比如(检索某个值,需要从头节点开始遍历)3、树存储方式的分析能提高数据存储,读取的效率, 比如利用 二叉排序原创 2020-08-26 22:32:33 · 314 阅读 · 0 评论