遍历

算法 - 二叉树

こ雲淡風輕ζ 提交于 2019-12-05 19:31:33
二叉树 二叉树按层遍历打印 宽度优先遍历,通常使用队列结构。常常有 按照层数换行 的问题。 1 / \ 2 3 / / \ 4 5 6 / \ 7 8 output: 1 2 3 4 5 6 7 8 思路: 这时可以使用两个变量记录,一个是用变量 last 记录当前的 last 结点,另一个是用变量 nlast 记录下一层的 last 结点。 pop() 时添加子树,如果 pop 值等于 last 指向的变量,打印换行符号,last 变量指向 nlast。 nlast 跟踪的是最新加入 queue 的数。 实现: public void printTree(TreeNode root) { TreeNode last = null; TreeNode nlast = null; Queue<TreeNode> queue = new LinkedList<>(); queue.offer(root); last = root; nlast = root; while (!queue.isEmpty()) { TreeNode tmp = queue.poll(); System.out.print(tmp.val + " "); if (tmp.left != null) { queue.offer(tmp.left); nlast = tmp.left; } if (tmp

数组对象

我只是一个虾纸丫 提交于 2019-12-05 18:59:49
数组Array 什么叫数组 一系列数据的集合,每一项可以保存任何类型的数据,称为数组的元素,每个元素之间用逗号隔开 数组格式:[数组元素,数组元素,数组元素] 数组创建方式 //1)字面量(推荐) var arr = [1,2,3]; //2)使用构造函数创建 var arr = new Array();//创建一个空数组 var arr = new Array('laoxie','lemon' ,'tiantian','yy');//创建数组并同时写入数据 数组操作 数组访问与写入 索引(下标):从0开始 var arr = ['html5','css3','javascript']; //访问 arr[0]; //=> 'html5' arr[2]; //=> 'javascript' //写入 arr[3] = 'web前端'; length:表示数组的长度 arr.length; //=> 3 数组遍历 for循环 var arr = ['html5','css3','javascript']; for(var i=0;i<arr.length;i++){ console.log(arr[i]); } 常用数组方法 push(): 往数组尾部添加一个或多个元素,返回数组新的长度 pop():删除数组最后一个元素,返回删除的元素 unshift()

20182310第十周学习总结

旧巷老猫 提交于 2019-12-05 17:36:54
20182310 2019-2020-1 《数据结构与面向对象程序设计》第十周学习总结 教材学习内容总结 本周主要学习无向图、有向图、带权图、常用的图算法、图的实现策略。 1.与树类似,图由结点和这些结点之间的连接构成。 顶点(vertice)就是这些结点。 边(edge)就是这些结点连接起来的线段。 路径(path):图中的一系列边,每条边连通两个顶点。 路径的长度(length):是该路径中边的条数(或者是顶点数减去1)。 环路(cycle):一种首结点和末结点相同且没有重边的路径。没有环路的图称为无环的(acyclic)。 完全图(complete graph):含有最多条边的无向图 对有n个结点的无向图,要使该图是完全的,要求有n(n-1)/ 2个边。 对有n个结点的有向图,要使该图是完全的,要求有n(n-1)个边。 2.无向图是一种边为无序结点对的图。 无序结点(undirected vertice):A、B、C、D 边(edge)(注:由于无序,所以<a,b>和<b,a>一样):(A,B) (B,D) (A,D) (B,C) (C,D) 邻接(adjacent):如果图中两个顶点之间有一条连通边,则称这两个顶点是邻接的。如图,A和B邻接,A和C不邻接。 自循环(self-loop)或环(sling):连通一个顶点及其自身的边称为自循环,如图,边(A,A

极*Java速成教程 - (5)

帅比萌擦擦* 提交于 2019-12-05 17:10:29
Java语言基础 容器 这个世界是有序的,将Java对象零散地放到内存中是不符合世界常理的,特别是有一大组相似的甚至不知道有多少数据的时候。把Java对象装进盒子里可以有序收纳,这个盒子就叫容器。 初次了解泛型 泛型,就是泛泛而指的类型,就是不确定具体类型的类型。Java提供的容器,一般都支持泛型,也就是说不管是什么对象,都可以丢到容器中进行收纳。但在Java中,所有类都继承自Object,所以把对象当作Object对象丢到容器里不会有任何问题,但当拿出来这个Object的时候,由于不知道这个对象的真正类型是什么,就可能在向下转型的时候出现错误,为了避免这种情况,一般对容器使用 <type> 表示容器的具体类型参数,也就是容器里放什么类就确定了,编译器就会对类型进行检查,避免运行时Object对象向下转型时错误的发生。例如: List<Apple> apples = new ArrayList<Apple>(); 你应当创建一个具体类的对象,将其转型为对应的接口,然后在其余的代码中都使用这个接口。 容器的类型 Collection 一个独立元素的序列,符合某种规则,提供迭代器,可以用foreach进行迭代遍历,也就是提供一个方法,可以每次从序列中从前到后依次拿到每一个元素。 List 有序的序列,对象元素按照插入顺序保存 ArrayList 连续储存的List,可以使用数字来查找值

MFiX中的碰撞搜索

喜你入骨 提交于 2019-12-05 16:48:41
在计算颗粒碰撞的时候,需要进行neighbor颗粒的搜寻,只知道大概是基于网格与颗粒绑定的方式,但是具体的实现方式还是比较模糊。搜寻部分代码如下 (mfix-19.2.2): 可以直接观察到的是,这里用到了两层 do 循环,外层循环是遍历所有颗粒的ID, LL ,这个ID是每个颗粒的全局标记。内层循环用来遍历颗粒 LL 周围的颗粒,ID为 I 。主要问题就在于上图红色方框的内容的含义。 通过借助mfix-16.1版这部分代码debug内容的输出可以大概理解上面的内容。16版代码如下: 在这里,外层循环输出了三个变量, LL , CC_START , CC_END ,内层循环输出了 I 。输出结果为: 从上面的输出可以看到 NEIGHBOR_INDEX(MAX_PIP-1) 返回的是总的neighbor数量,从下面的输出可以看出 CC_START = NEIGHBOR_INDEX(LL-1) 和 CC_END = NEIGHBOR_INDEX(LL) 分别代表颗粒 LL 的neighbor遍历区间,下面说明一下这里的逻辑。 通过观察输出最后可以得到结论,首先程序会得到所有neighbor颗粒的数量,然后用数组 NEIGHBOR_INDEX(:) 来给所有neighbor颗粒编号,例如这个算例中一共有2400个颗粒,neighbor颗粒一共有6924个,因此编号从1~6924。 颗粒

js 在array的遍历操作中修改arry中元素数量 出现的一些奇特的操作

这一生的挚爱 提交于 2019-12-05 16:41:10
在js中array是属于复杂类型,在arr1=arr2得赋值操作中,arr1得到的值并不是arr2的value,而是一个指向引用。那么修改arr1的同时arr2读取的值也会同步变化,那么问题来了,上代码 · let a = [1, 2, 3, 4, 5, 6, 7];//定义一个7个元素的数组 // a.forEach(i => {//遍历数组 // a.splice(0, 1, 'add_value1', 'add_value2',);//每次遍历的时候删除一个元素,添加两个元素 // console.log(i);//打印的结果 第一次打印值:1 其余6次打印的值皆为add_value2 说明当在array遍历的过程中添加array内元素的数量,遍历次数值 仍是调用遍历时array内元素的数量值 // }) a.forEach(i => {//遍历数组 a.splice(1, 2, 'add_value1');//每次遍历的时候删除两个元素,添加1个元素 console.log(a[3]);//打印的结果 第一次打印值:1 第二次打印为‘add_value1’ 第三次为5 第四次为7 然后就结束遍历了!!! 而且第四次遍历时a[3]为undefined但却打印出了7 这是我所疑惑的 }) 希望有大牛指教,这是什么原理 来源: https://www.cnblogs.com

2019年11月25日开发手记

淺唱寂寞╮ 提交于 2019-12-05 15:37:36
对滤波后的图像做行列投影,通过阈值得到运动图像横纵坐标点集。使用水平与竖直投影算法,投影算法的时间复杂度为O(x 2 ),哪怕进行优化也最多可变为O(xlogx),时间上无法接受。再次使用傅里叶变换?还是将目标放在轮廓点整合? 使用竖直投影法的话还不如直接遍历所有点找轮廓,这对后面进行聚类也比较方便。 决定采用竖直投影+遍历,只进行一次投影,在投影过程中将点逐个遍历,高亮点的横纵坐标压入栈,输出横纵坐标的最大值和最小值。 def line_trans(img): l = Stack() h_1= Stack() l.isEmpty() h_1.isEmpty() #ret, thresh1 = cv2.threshold(img, 25, 255, cv2.THRESH_BINARY) # 将图片进行二值化(130,255)之间的点均变为255(背景) (h, w) = img.shape # 返回高和宽 a = [0 for z in range(0, w)] # 记录每一列的波峰 for j in range(0, w): # 遍历一列 q_1=0 for i in range(0, h): # 遍历一行 #print(1) #print(img[i, j]) if img[i, j] !=0: # 如果该点为白点 print(1) if q_1 ==0: i_1=i i_2

20182301 2019-2020-1 《数据结构与面向对象程序设计》第十周学习总结

白昼怎懂夜的黑 提交于 2019-12-05 15:33:13
20182301 2019-2020-1 《数据结构与面向对象程序设计》第十周学习总结 教材学习内容总结 图的结构构成 顶点(vertex):图中的数据元素,如图一 边(edge):图中连接这些顶点的线,如图一 G=(V,E) 或者 G=(V(G),E(G)) 其中 V(G)表示图结构所有顶点的集合,顶点可以用不同的数字或者字母来表示。E(G)是图结构中所有边的集合,每条边由所连接的两个顶点来表示。 图结构中顶点集合V(G)不能为空,必须包含一个顶点,而图结构边集合可以为空,表示没有边。 图的基本概念 无向图 如果一个图结构中,所有的边都没有方向性,那么这种图便称为无向图。典型的无向图,如图二所示。由于无向图中的边没有方向性,这样我们在表示边的时候对两个顶点的顺序没有要求。例如顶点VI和顶点V5之间的边,可以表示为(V2, V6),也可以表示为(V6,V2)。 有向图 一个图结构中,边是有方向性的,那么这种图就称为有向图,如图三所示。由于图的边有方向性,我们在表示边的时候对两个顶点的顺序就有要求。我们采用尖括号表示有向边,例如<V2,V6>表示从顶点V2到顶点V6,而<V6,V2>表示顶点V6到顶点V2。 顶点的度 连接顶点的边的数量称为该顶点的度。顶点的度在有向图和无向图中具有不同的表示。对于无向图,一个顶点V的度比较简单,其是连接该顶点的边的数量,记为D(V)。

20182303 2019-2020-1 《数据结构与面向对象程序设计》第10周学习总结

人盡茶涼 提交于 2019-12-05 15:29:37
目录 20182303 2019-2020-1 《数据结构与面向对象程序设计》第10周学习总结 教材学习内容总结(Chapter19 图) 图的定义和基本术语 图的操作 图的存储结构及实现 图的遍历 教材学习中的问题和解决过程 代码调试中的问题和解决过程 代码托管 上周考试错题总结 学习进度条 参考资料 20182303 2019-2020-1 《数据结构与面向对象程序设计》第10周学习总结 教材学习内容总结(Chapter19 图) 图的定义和基本术语 定义: 图 是由顶点集合(Vertex)及顶点间的关系集合组成的一种数据结构: Graph=( V, E ) V={x|x∈某个数据对象 } 是顶点的有穷非空集合; E={(x, y)|x,y∈V} 是顶点之间关系的有穷集合,也也叫做边(Edge)集合。 在图中的数据元素通常称为 顶点V 。 无向边:若顶点x和y之间的边没有方向,则称该边为无向边(x,y),(x,y)与(y,x)意义相同,表示x和y之间有连接。 无向图:若图中任意两个顶点之间的边均是无向边,则称该图为无向图。 有向边:若顶点x和y之间的边有方向,则称该边为有向边<x,y>,<x,y>与<y,x>意义不同,表示从x连接到y,x称为尾,y称为头。 有向图:若图中任意两个顶点之间的边均是有向边,则称该图为有向图。 邻接:是两个顶点之间的一种关系。如果图包含(u,v)

3.文件操作

爱⌒轻易说出口 提交于 2019-12-05 15:18:40
3.文件操作 让前端觉得如获神器的不是NodeJS能做网络编程,而是NodeJS能够操作文件。小至文件查找,大至代码编译,几乎没有一个前端工具不操作文件。换个角度讲,几乎也只需要一些数据处理逻辑,再加上一些文件操作,就能够编写出大多数前端工具。本章将介绍与之相关的NodeJS内置模块。 开门红 NodeJS提供了基本的文件操作API,但是像文件拷贝这种高级功能就没有提供,因此我们先拿文件拷贝程序练手。与 copy 命令类似,我们的程序需要能接受源文件路径与目标文件路径两个参数。 小文件拷贝 我们使用NodeJS内置的 fs 模块简单实现这个程序如下。 var fs = require('fs'); function copy(src, dst) { fs.writeFileSync(dst, fs.readFileSync(src)); } function main(argv) { copy(argv[0], argv[1]); } main(process.argv.slice(2)); 以上程序使用 fs.readFileSync 从源路径读取文件内容,并使用 fs.writeFileSync 将文件内容写入目标路径。 豆知识: process 是一个全局变量,可通过 process.argv 获得命令行参数。由于 argv[0] 固定等于NodeJS执行程序的绝对路径,