深度优先与广度优先的定义

首先我们先要知道什么是深度优先什么是广度优先。

深度优先遍历是指从某个顶点出发,首先访问这个顶点,然后找出刚访问这个结点的第一个未被访问的邻结点,然后再以此邻结点为顶点,继续找它的下一个顶点进行访问。重复此步骤,直至所有结点都被访问完为止。

广度优先遍历是从某个顶点出发,首先访问这个顶点,然后找出刚访问这个结点所有未被访问的邻结点,访问完后再访问这些结点中第一个邻结点的所有结点,重复此方法,直到所有结点都被访问完为止。

代码实现

以下代码针对树的遍历实现,可能根据实际情况有所不同。

有疑问的话可以咨询我。

//1.深度优先遍历的递归写法
function deepTraversal(node){let nodes=[];if(node!=null){nodes.push[node];let childrens=node.children;for(let i=0;i<childrens.length;i++)deepTraversal(childrens[i]);}return nodes;
}//2.深度优先遍历的非递归写法
function deepTraversal(node){let nodes=[];if(node!=null){let stack=[];//同来存放将来要访问的节点
        stack.push(node);while(stack.length!=0){let item=stack.pop();//正在访问的节点
            nodes.push(item);let childrens=item.children;for(let i=childrens.length-1;i>=0;i--)//将现在访问点的节点的子节点存入stack,供将来访问
                stack.push(childrens[i]);}}return nodes;
}//3.广度优先遍历的递归写法
function wideTraversal(node){let nodes=[],i=0;if(node!=null){nodes.push(node);wideTraversal(node.nextElementSibling);node=nodes[i++];wideTraversal(node.firstElementChild);}return nodes;
}//4.广度优先遍历的非递归写法
function wideTraversal(node){let nodes=[],i=0;while(node!=null){nodes.push(node);node=nodes[i++];let childrens=node.children;for(let i=0;i<childrens.length;i++){nodes.push(childrens[i]);}}return nodes;
}

深度优先遍历从某个顶点出发,首先访问这个顶点,然后找出刚访问这个结点的第一个未被访问的邻结点,然后再以此邻结点为顶点,继续找它的下一个新的顶点进行访问,重复此步骤,直到所有结点都被访问完为止。广度优先遍历从某个顶点出发,首先访问这个顶点,然后找出这个结点的所有未被访问的邻接点,访问完后再访问这些结点中第一个邻接点的所有结点,重复此方法,直到所有结点都被访问完为止。

转载于:https://www.cnblogs.com/wuguanglin/p/DPSandBPS.html

js实现对树深度优先遍历与广度优先遍历相关推荐

  1. 多级树的深度优先遍历与广度优先遍历(Java实现)

    目录 多级树的深度优先遍历与广度优先遍历(Java实现) 节点模型 深度优先遍历 广度优先遍历 多级树的深度优先遍历与广度优先遍历(Java实现) 深度优先遍历与广度优先遍历其实是属于图算法的一种,多 ...

  2. [js] 解释下深度优先遍历和广度优先遍历的区别及如何实现

    [js] 解释下深度优先遍历和广度优先遍历的区别及如何实现 1.深度优先采用堆栈结构,先进后出,所占的空间较小,执行时间较长: 2.广度优先采用队列结构先进先出,所占空间较大,执行时间短,空间换时间: ...

  3. 数据结构之图:邻接矩阵和邻接表、深度优先遍历和广度优先遍历

    简介 线性表是一种线性结构,除了头结点和尾节点,线性表的每个元素都只有一个前取节点和一个后继节点.而树结构则相较于线性表更加复杂,它描述的关系为数据元素之间的父子关系,也是现实世界父子关系的缩影, 一 ...

  4. 二叉树深度优先遍历和广度优先遍历

    二叉树深度优先遍历和广度优先遍历

  5. 二叉树的深度优先遍历和广度优先遍历

    二叉树是一种很重要的数据结构,对于二叉树的遍历,有深度优先遍历和广度优先遍历,深度优先遍历又有先序.中序.后续遍历,广度优先遍历就是按层遍历. 1. 深度优先遍历 深度优先遍历,也就是先序.中序.后续 ...

  6. 广度优先搜索生成树怎么画_图的深度优先遍历与广度优先遍历以及最小生成树...

    图的深度优先遍历 题目:写出附从每个顶点出发的一次深度优先搜索遍历序列.在纸上画出遍历过程和序列,提交截图. 错误回答 从A点开始遍历:0124-01324-0134-0324-034 从B点开始遍历 ...

  7. 大话数据结构 17:图的深度优先遍历和广度优先遍历

    深度优先遍历 主要思路是从图中一个未访问的顶点 V 开始,沿着一条路一直走到底,然后从这条路尽头的节点回退到上一个节点,再从另一条路开始走到底-,不断递归重复此过程,直到所有的顶点都遍历完成,它的特点 ...

  8. 图:图的邻接表创建、深度优先遍历和广度优先遍历代码实现

    邻接表介绍 邻接矩阵是不错的一种图存储结构,但是我们也发现,对于边数相对顶点较少的图,这种结构比较较浪费存储空间.如果不想浪费存储空间,大家肯定会先到链表.需要空间的时候再才想内存去申请,同样适用于图 ...

  9. 图:图的邻接矩阵创建、深度优先遍历和广度优先遍历详解

    邻接矩阵介绍 直接说,邻接矩阵是图的一种存储结构.那么图是什么呢?图是一种逻辑结构,和线性结构.树形结构.集合结构一样 是一种逻辑结构用来描述数据对象中的数据元素之间的关系.来看下图的定义:图(Gra ...

  10. 数据结构—无向图创建邻接矩阵、深度优先遍历和广度优先遍历(C语言版)

    无向图创建邻接矩阵.深度优先遍历和广度优先遍历 一.概念解析: (1)无向图: (2)邻接矩阵: 二.创建邻接矩阵: 三.深度遍历.广度遍历 (1)深度遍历概念: (2)广度遍历概念: 四.实例展示 ...

最新文章

  1. mysql数据导出权限问题
  2. python流程控制-Python | 流程控制
  3. iptables基础篇
  4. 猪年看猪,猪男猪女一共十个。
  5. 简析Visual C++中的活动数据对象
  6. shell 清楚空格_Cygwin系列(五):Shell命令行初体验
  7. 好消息,scott的asp.net 2.0数据导航系列全部出版了
  8. 图灵奖背后:一个奥斯卡拿到手软,一个公司卖了 160 亿
  9. 如何利用ansible callback插件对执行结果进行解析
  10. 如何在VS2013中配置一个DirectX开发环境
  11. net use 命令使用教程
  12. 计算机英语形成性考核册,开放英语1形成性考核册答案(中央广播电视大学外语部)doc...
  13. 使用python做王者荣耀挂机刷金币脚本
  14. PostgreSQL 配置文件 postgresql.conf 及 postgresql.auto.conf
  15. 窗体泄漏错误has leaked window android.widget
  16. 电子信息工程找什么工作,能干什么
  17. 网页视频倍速播放的方法
  18. 使用 idea查看类关系图形
  19. android x86 4.4 网络,安卓Android-x86 4.4联网设置教程 解决不能上网
  20. 吴恩达机器学习个人笔记03——多变量线性回归

热门文章

  1. nyoj 114某种排序(水 大数+优化大数)
  2. 微软sql服务器双机热备,office2014-SQL Server2014 R2 双机热备,保护你的数据
  3. python消息模块_python - psutil 系统信息模块
  4. linux pci带宽,Linux查看PCIe版本及速率
  5. html表单提交数据保存到mysql中_php – Canonical:如何将HTML表单数据保存到MySQL数据库中...
  6. mysql 主从复制延迟_什么情况会导致MySQL主从复制延迟?
  7. 浮动网页html特效代码,网页上可点击关闭的纯代码无图版浮动tips提示特效代码...
  8. python append和extend_Python中append和extend区别
  9. docker常用操作和命令
  10. python字典用法总结