遍历

bfs 二叉树 遍历

匆匆过客 提交于 2020-02-03 07:03:48
bfs 遍历二叉树 之前只知道bfs 的思想以及需要使用队列来进行存储 为了更好的理解bfs 手写了bfs 遍历二叉树的两种方式 方法: 一种是采用常用的递归执行 另一种是采用循环执行(使用栈来代替递归) 二叉树定义 class Node { //get set方法省略 private Node leftChild ; private Node rightChild ; private int data ; public Node ( int data ) { this . data = data ; } } 构造二叉树 Node node = new Node ( 1 ) ; node . setLeftChild ( new Node ( 2 ) ) ; node . setRightChild ( new Node ( 3 ) ) ; node . getLeftChild ( ) . setLeftChild ( new Node ( 4 ) ) ; node . getLeftChild ( ) . setRightChild ( new Node ( 5 ) ) ; bfs ( node ) ; 使用bfs 方式一:递归 public static void bfs ( Node node ) { if ( node != null ) { System . out .

数据结构---->图的遍历

生来就可爱ヽ(ⅴ<●) 提交于 2020-02-03 04:40:52
三 图的遍历 遍历定义: 从已给的连通图中某一顶点出发,沿着一些边访遍图中所有的顶点,且使每个顶点仅被访问一次,就叫做图的遍历,它是图的基本运算。 避免重复访问? 图中可能存在回路,且图的任一顶点都可能与其它顶点相通,在访问完某个顶点之后可能会沿着某些边又回到了曾经访问过的顶点。为了保证图中的各个顶点在遍历过程中访问且仅被访问一次,需要为每个顶点设一个访问标志,Vertex 类中的visited成员变量可以用来作为是否被访问过的标志。 3.1深度优先搜索( DFS )Depth First Search 深度优先搜索( depth firstsearch )遍历类似于树的先根遍历,是树的先根遍历的推广。 深度优先搜索的基本方法是:从图中某个顶点发v 出发,访问此顶点,然后依次从v的未被访问的邻接点出发深度优先遍历图,直至图中所有和v有路径相通的顶点都被访问到;若此时图中尚有顶点未被访问,则另选图中一个未曾被访问的顶点作起始点,重复上述过程,直至图中所有顶点都被访问到为止。 无向图(a)得到的遍历序列为:a , b ,c , e , f , d。 有向图(b)得到的遍历序列为:a , b ,e , c , f , d。 //对图进行深度优先遍历 public Iterator DFSTraverse(Vertex v) { LinkedList traverseSeq = new

数据结构---->图的遍历

╄→гoц情女王★ 提交于 2020-02-03 04:39:56
三 图的遍历 遍历定义: 从已给的连通图中某一顶点出发,沿着一些边访遍图中所有的顶点,且使每个顶点仅被访问一次,就叫做图的遍历,它是图的基本运算。 避免重复访问? 图中可能存在回路,且图的任一顶点都可能与其它顶点相通,在访问完某个顶点之后可能会沿着某些边又回到了曾经访问过的顶点。为了保证图中的各个顶点在遍历过程中访问且仅被访问一次,需要为每个顶点设一个访问标志,Vertex 类中的visited成员变量可以用来作为是否被访问过的标志。 3.1深度优先搜索( DFS )Depth First Search 深度优先搜索( depth firstsearch )遍历类似于树的先根遍历,是树的先根遍历的推广。 深度优先搜索的基本方法是:从图中某个顶点发v 出发,访问此顶点,然后依次从v的未被访问的邻接点出发深度优先遍历图,直至图中所有和v有路径相通的顶点都被访问到;若此时图中尚有顶点未被访问,则另选图中一个未曾被访问的顶点作起始点,重复上述过程,直至图中所有顶点都被访问到为止。 无向图(a)得到的遍历序列为:a , b ,c , e , f , d。 有向图(b)得到的遍历序列为:a , b ,e , c , f , d。 //对图进行深度优先遍历 public Iterator DFSTraverse(Vertex v) { LinkedList traverseSeq = new

数据结构---->图的遍历

 ̄綄美尐妖づ 提交于 2020-02-03 04:39:05
三 图的遍历 遍历定义: 从已给的连通图中某一顶点出发,沿着一些边访遍图中所有的顶点,且使每个顶点仅被访问一次,就叫做图的遍历,它是图的基本运算。 避免重复访问? 图中可能存在回路,且图的任一顶点都可能与其它顶点相通,在访问完某个顶点之后可能会沿着某些边又回到了曾经访问过的顶点。为了保证图中的各个顶点在遍历过程中访问且仅被访问一次,需要为每个顶点设一个访问标志,Vertex 类中的visited成员变量可以用来作为是否被访问过的标志。 3.1深度优先搜索( DFS )Depth First Search 深度优先搜索( depth firstsearch )遍历类似于树的先根遍历,是树的先根遍历的推广。 深度优先搜索的基本方法是:从图中某个顶点发v 出发,访问此顶点,然后依次从v的未被访问的邻接点出发深度优先遍历图,直至图中所有和v有路径相通的顶点都被访问到;若此时图中尚有顶点未被访问,则另选图中一个未曾被访问的顶点作起始点,重复上述过程,直至图中所有顶点都被访问到为止。 无向图(a)得到的遍历序列为:a , b ,c , e , f , d。 有向图(b)得到的遍历序列为:a , b ,e , c , f , d。 //对图进行深度优先遍历 public Iterator DFSTraverse(Vertex v) { LinkedList traverseSeq = new

数据结构7.3_图的遍历

佐手、 提交于 2020-02-03 04:37:39
我们希望从图中某一顶点出发访遍图中其余顶点,且使每一个顶点仅被访问一次。 这一过程就叫做 图的遍历 。 图的遍历算法是求解 图的连通性问题 、 拓扑排序 和 求关键路径 等算法的基础。 然而,图的遍历要比树的遍历复杂得多。 因为图的任一顶点都可能和其余的顶点相邻接。 所以,在访问了某个顶点之后,可能沿着某条路径搜索之后,又回到该顶点上。 为了避免同一顶点被访问多次,在遍历图的过程中,必须记下每个已访问过的顶点。 为此,我们可以设一个辅助数组visited[0...n-1],它的初始值置为“假”或者零,一旦访问了顶点vi,便置visted[i]为“真”或者为被访问时的次序号。 通常有两条遍历图的路径:深度优先搜索和广度优先搜索。 它们对于无向图和有向图都适用。 =================================================== 深度优先搜索 (Depth First Search) DFS 这种遍历类似于树的先根遍历,是树的先根遍历的一种推广。 图(a) 是一张无向图 图(b)是深度优先搜索的过程 图(c)是广度优先搜索的过程 假设初始状态是图中所有顶点未曾被访问,则深度优先搜索可从图中某个顶点v出发,访问此顶点,然后依次从v的未被访问的邻接点出发深度优先遍历图,直至图中所有和v有路径相通的顶点都被访问到; 若此图中尚有顶点未被访问

数据结构与算法题目集(中文)6-9 二叉树的遍历 (25分)

烂漫一生 提交于 2020-02-03 01:04:39
1.题目链接 https://pintia.cn/problem-sets/15/problems/732 2.题目分析 1.void InorderTraversal( BinTree BT );中序遍历,即“根,左,右” 先输出根节点,再递归进入左节点,之后再递归进入右节点 2.void PreorderTraversal( BinTree BT ); 先序遍历,即“左,跟,右”先递归进入左节点,之后返回一层输出根节点,再递归进入右节点 3.void PostorderTraversal( BinTree BT );后序遍历,即“左,右,跟”先不断递归进入左节点,再分别递归入右节点,之后输出根节点 4.void LevelorderTraversal( BinTree BT );层序遍历,即一层一层从上往下从左往右输出节点 层序遍历具体的实现方法: 声明一个binTree[100]数组,使用head、last两个指针; 首先将根节点输出,并将last指针++,接着将根节点的左、右节点放到数组中进行缓存,同时使last指针++; 下一次再将左节点输出,同时将左节点的左、右节点存入数组,last++,右节点同理; 最后当head与last值相等的时候,表示到达最右下方节点,输出结束。 3.代码 void InorderTraversal( BinTree BT ) { if(BT=

数据结构复习 ---- 广度优先遍历(BFS)

試著忘記壹切 提交于 2020-02-02 21:31:52
一、广度优先遍历的定义 广度优先遍历(Breadth_First_Search),又称为广度优先搜索,简称BFS;如果说深度优先遍历类似树的前序遍历,那么广度优先遍历就类似于树的层序遍历;不过相对于深度优先遍历,广度优先遍历借助了一个队列来辅助,利用队列先进先出的性质实现广度优先,看似复杂一些,其实也很好理解;先看代码~ 二、广度优先的实现 邻接矩阵 该算法的整体思路是先初始化标志数组,然后用双重循环各顶点;第一层循环,防止图不连通;二层循环是广度优先的核心,将顶点i的所有邻接顶点都放入队列,然后对队列进行出队操作,出队时返回出队顶点在顶点表中的位置,然后再将该出队顶点的邻接顶点入队,知道队列为空,这样该连通范围内的所有顶点都被遍历到了; bool visited[MAXVEX];与深度优先同样的标志数组,去重; 函数OutQueue,为了能够返回出队顶点的位置; bool visited [ MAXVEX ] ; int OutQueue ( Graph & graph , queue < char > & queue ) { char tempVex = queue . front ( ) ; for ( int i = 0 ; i < graph . numVertexes ; ++ i ) { if ( tempVex == graph . vexs [ i ] ) {

数组遍历及其他方法

社会主义新天地 提交于 2020-02-02 18:24:02
本文介绍下数组遍历及其他方法相关内容 (1)控制台输出数组显式原型对象,然后依次查看    (2)相关常用遍历方法   1、find:接收一个方法作为参数,方法内部返回一个条件,find会遍历数组返回匹配元素,否则返回undefined var arrayData = [111,222,333,444,555,666,777,888] var findValue = arrayData.find(function(item){ return 222 === item; }) console.log(findValue)//222   2、findInde:与find类似,但返回值为匹配元素的下标 var arrayData = [111,222,333,444,555,666,777,888] var findIndexValue = arrayData.findIndex(function(item){ return 222 === item; }) console.log(findIndexValue)//1   3、reduce:接收函数作为参数,函数内部接收两个参数,用于对数组内部元素进行累加或累减 var arrayData = [111,222,333,444,555,666,777,888] var reduceValue = arrayData.reduce

二叉树的链表实现

断了今生、忘了曾经 提交于 2020-02-02 11:58:09
二叉树的链表实现 在构建二叉树时使用完全二叉树的特性,所以构建的是一颗完全二叉树 打印二叉树 打印完全二叉树要使用队列结构保存序列。将根节点存入队列,然后在while循环中将队列的第一个元素出队并将其右孩子和左孩子依次入队(如果不为null),这样的入队的顺序就按层按从左到右的顺序,出队亦是。所以可以通过调整入队顺序改变遍历顺序.以此循环遍历root及其子树,循环的条件是队列不为null. //print tree void printTree(treeLink *root){ int height = getHeight(root);//树的高度,层数 int count = 0,length = 1;//换行计数 int k;//元素间距 treeLink *node;//遍历树的指针 treeList *head = newTreeList();//空顺序表 addTree(head,root);//将root(根)入队 //k 的值用于控制tree node 间距,当从root节点向下打印时, k是递减的,k的递减规律是: n = (n+1) - 2^n ;(n 是当前层数,n-1表示上一层,root的层数n = 数的高度,n从叶子(最末端)向根节点计数. (2^n == 1<<n) k = (1 << (height+1)) - 1; k = k - (1 <<

数据结构经典十套卷之五

走远了吗. 提交于 2020-02-02 06:40:36
一、选择题 (20 分 ) 1 .数据的最小单位是( )。 (A) 数据项 (B) 数据类型 (C) 数据元素 (D) 数据变量 2 .设一组初始记录关键字序列为 (50 , 40 , 95 , 20 , 15 , 70 , 60 , 45) ,则以增量 d=4 的一趟 希尔排序 结束后前 4 条记录关键字为( )。 (A)40 , 50 , 20 , 95 (B)15 , 40 , 60 , 20 (C)15 , 20 , 40 , 45 (D)45 , 40 , 15 , 20 3 .设一组初始记录关键字序列为 (25 , 50 , 15 , 35 , 80 , 85 , 20 , 40 , 36 , 70) ,其中含有 5 个长度为 2 的有序子表,则用归并排序的方法对该记录关键字序列进行一趟归并后的结果为( )。 (A) 15 , 25 , 35 , 50 , 20 , 40 , 80 , 85 , 36 , 70 (B) 15 , 25 , 35 , 50 , 80 , 20 , 85 , 40 , 70 , 36 (C) 15 , 25 , 35 , 50 , 80 , 85 , 20 , 36 , 40 , 70 (D) 15 , 25 , 35 , 50 , 80 , 20 , 36 , 40 , 70 , 85 4 .函数 substr(