- 博客(16)
- 收藏
- 关注
原创 16、顺序存储二叉树
顺序存储二叉树一、什么是顺序存储二叉树二、顺序存储二叉树的特点三、图解四、代码 一、什么是顺序存储二叉树 顺序存储二叉树就是用数组的方式存储二叉树,通常只考虑完全二叉树的情况。 二、顺序存储二叉树的特点 数组下标为 n 的左孩子的下标为2n+1; 数组下标为 n 的右孩子的下标为2n+2; 数组下标为 n 的父节点的下标为(n-1)/2; 三、图解 可见,1 是根节点,其左孩子的下标为2*0+1=1,arr[1]=2;右孩子的下标为2*0+2=2,arr[2]=3; 其它的节点以此类推。 四、代码 p
2021-03-11 14:55:27
208
1
原创 15、二叉树的层序遍历
二叉树的层序遍历一、层序遍历的概念二、思路分析三、代码 一、层序遍历的概念 将一颗二叉树按照层次顺序遍历整棵树。先遍历第一层(root层),接着遍历第二层,再接着时第三层…直到将所有节点遍历完成。 层序遍历示意图 二、思路分析 完成层序遍历需要用到一个队列Queue来辅助。 1、若当前节点不为空,将当前节点入队列; 2、判断当前队列是否为空; 3、若队列不为空,第一个元素出队列,并将其左子树入队列、右子树入队列; 4、若队列为空,说明层序遍历完成; 三、代码 package com.tree; imp
2021-03-10 11:29:22
218
原创 14、二叉树的先序,中序,后序遍历
二叉树的遍历一、为什么需要树存储结构二、二叉树示意图三、二叉树的遍历四、代码 一、为什么需要树存储结构 数组存储方式的分析 优点:通过下边访问数组元素,访问速度快。对于有序数组,可以使用二分查找、插值查找等方法提高检索速度。 缺点:如果要删除或者在指定位置插入某个值,会造成大量元素移动,效率较低。 单链表存储方式分析 优点:在元素的插入、删除方面相对于数组方式有优化,效率得到提高。 缺点:在进行检索时,需要链表头部依次检索,效率低。 二、二叉树示意图 三、二叉树的遍历 前序遍历 输出当前节点;
2021-03-10 09:14:11
144
原创 12、插值查找
插值查找一、思路分析二、代码 一、思路分析 插值查找的基本思想和二分查找的基本思想类似。 二分查找中mid的取值为 mid = (left+right)/2 = left + (right - left)/2。 插值查找中mid的取值为mid=left+(item-arr[left])/(right-left)*(arr[right]-arr[left])。 注意:因为在上述mid的计算公式中(item-arr[left])有可能为负数,则在插值算法的条件中需要加上判断条件item >= arr[le
2021-03-05 16:26:12
176
原创 11、二分查找
一、思路分析 在一个有序序列arr[left,…,mid,…right]中查找一个元素item是否存在。 mid = (left+right)/2;用arr[mid]和item比较大小: 若item>arr[mid],则去序列右边查找item, 若item<arr[mid],则去序列左边查找item, 若item=arr[mid],则说明找到item,返回true。 二、代码 package com.Search; /** * 二分查找算法,只能在有序序列中使用 * * @author
2021-03-04 22:16:02
234
1
原创 10、归并排序
归并排序一、思路分析二、图解三、代码 一、思路分析 归并排序(MERGE-SORT)是利用归并的思想实现的排序方法,该算法采用经典的分治(divide-and-conquer)策略(分治法将问题分(divide)成一些小的问题然后递归求解,而治(conquer)的阶段则将分的阶段得到的各答案"修补"在一起,即分而治之)。 二、图解 再来看看治阶段,我们需要将两个已经有序的子序列合并成一个有序序列,比如上图中的最后一次合并,要将[4,5,7,8]和[1,2,3,6]两个已经有序的子序列,合并为最终序列[1,2
2021-03-04 21:10:33
192
1
原创 9、快速排序
快速排序一、思路分析二、图解三、代码 一、思路分析 快速排序(QuickSort)是对冒泡排序的一种改进。基本思想是:通过一趟排序将要排序的数据分成独立的两部分,左部分所有数据都小于右部分所有数据,然后再按照这种方法分别对这两部分进行快速排序,直到整体都是一个有序的序列。 二、图解 三、代码 ...
2021-03-04 15:54:14
151
1
原创 8、插入排序
插入排序一、思路分析二、图解三、代码 一、思路分析 将序列看成是两个列表,左边看做有序列表,右边看作无序列表,刚开始有序列表只包含一个元素arr[0],无序列表包含剩余元素arr[1]~arr[n-1];第一趟排序后将无序列表的第一个元素arr[1]合并到有序列表中,有序列表变成(arr[0], arr[1])或者是(arr[1], arr[0]),无序列表包含剩余元素arr[2]~arr[n-1];第二趟排序将无序列表的第一个元素arr[2]合并到有序列表,有序列表变为(arr[1], arr[0],ar
2021-03-03 11:52:24
193
2
原创 7、选择排序
选择排序一、基本思想二、图解三、代码 一、基本思想 选择排序(select sorting)的排序思想:第一次从arr[0]~arr[n-1]中选择最小值和a[0]交换位置,第二次从arr[1]~arr[n-1]中选择最小值和arr[1]交换位置,第三次从arr[2]~arr[n-1]中选择最小值和arr[2]交换位置,以此类推,总共需要进行n-1趟选择交换,最终得到一个有序列表。 二、图解 每趟中标红的两个数字交换位置。 三、代码 package com.sort; import java.util.
2021-03-02 20:44:22
137
原创 6、冒泡排序
冒泡排序一、基本思想二、优化三、图解四、代码 一、基本思想 通过对待排序序列从前到后(从下标小的元素开始),以此比较相邻元素的值,若发现逆序则交换。没有优化时要进行arr.length-1趟排序。 二、优化 因为排序过程中,各个元素不算靠近自己的位置,若在某一趟排序中,没有元素发生交换,就说明已完成序列排序。因此可以设置一个flag标志来判断在一趟排序中是否发生元素交换。优化后能够减少需要排序的趟数。 三、图解 四、代码 package com.sort; import java.util.Arrays
2021-03-02 20:07:16
290
原创 4、递归-迷宫问题(走迷宫)
一、需求分析 在迷宫中,找到一条从起点到达终点的通路,有通路则返回true,并显示通路,否则返回false。 二维数组模拟迷宫,0:表示当前节点没有走过;1:表示墙,不能走。 二、解决思路 1、先定义几个数字,0:表示当前节点没有走过;1:表示墙,不能走;2:表示当前节点为通路;3:表示当前节点已经走过,但是不是通路。 2、假设当前节点为通路,设置值为2。 3、检查当前节点的上下左右四个节点,若上下左右四个节点都不通,则将当前节点值设置为3;若上下左右四个节点中有某一个节点为通路,则当前节点值为2保
2021-03-01 16:25:34
432
原创 3、中缀表达式转换成后缀表达式
1、需要使用两个栈,一个用于存放后缀表达式的中间结果(tempStack)和一个用于存放操作符(operStack); 2、扫描到"(",此时operStack为空,直接入栈 operStack => "(" 3、扫描到"3",数字直接入栈tempStack tempStack => "3" operStack => "(" 4、扫描到"+",优先级大于operStack栈顶元素的优先级,直接入栈operStack tempStack => "3" operStack => "(","+" 5、扫描到"4
2021-02-25 11:04:30
470
1
原创 2、利用栈计算后缀表达式(逆波兰表达式)
一、需求分析 1、输入一个逆波兰表达式,利用栈计算其结果; 2、支持小括号和多位数整数; 二、思路分析 例如:(3+5)*5-6对应的后缀表达式为3 5 + 5 * 6 -,其求值步骤如下: 1.从左到右扫描,遇见数字直接入栈,3和5入栈; 2.遇见操作符+,从栈中弹出两个数3和5,根据操作符计算结果为8,并将结果8入栈; 3.将5入栈; 4.遇见操作符*,弹出两个操作符5和8,计算结果为5*8=40,将40入栈; 5.将6入栈; 6.遇见操作符-,弹出两个数字6和40,计算结果为40-6=34,将34入栈
2021-02-24 20:51:10
437
原创 1、利用栈计算中缀表达式
Java栈计算中缀表达式 一、思路分析 给出一个中缀表达式:“3+2*6-2” 从左到右依次扫描字符串,当前字符为数字时,直接进数字栈;当前字符为运算符时,若当前运算符栈为空,则直接入栈,否则拿当前运算符与运算符栈顶运算符比较优先级,若当前运算符优先级>=栈顶运算符优先级,则直接入栈,若当前运算符优先级<栈顶运算符优先级,则从数字栈中弹出两个数据且从运算符栈中弹出栈顶运算符,计算结果;将计算结果入数字栈,当前运算符入运算符栈。 直到字符串扫描结束,如果运算符栈不为空,则从数字栈中弹出两个数据且
2021-02-24 20:16:30
1615
原创 markdown的基本使用
欢迎使用Markdown编辑器 你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。 新的改变 我们对Markdown编辑器进行了一些功能拓展与语法支持,除了标准的Markdown编辑器功能,我们增加了如下几点新功能,帮助你用它写博客: 全新的界面设计 ,将会带来全新的写作体验; 在创作中心设置你喜爱的代码高亮样式,Markdown 将代码片显示选择的高亮样式 进行展示; 增加了 图片
2021-02-24 19:59:53
120
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人