1、前置条件

我们提前构建一棵树,类型为 Tree ,其节点类型为 Note。这里我们不进行过多的实现,简单描述下 Note 的结构:

class Node{
constructor(data){
this.data = data;
this.children = []; // 存放所以子节点,如果是二叉树,可以分为两个属性,left和right分别存储左右子节点
}
} class Tree{
constructor(){
this.root = new Node('root'); // 树结构,标识出自己的根节点
}
}

2、广度优先遍历

广度优先遍历,就是按层来遍历树结构,例如:

    1
2 3
4 5 6
// 遍历出来的结果:123456

实现思路

    1. 首先创建一个队列,然后将树的根节点,放入队列,作为队列第一个元素
    1. 然后开始遍历队列,如果遍历的元素,有子节点,则将所有子节点,追加进队列末尾
    1. 最后的队列就是广度优先遍历的结果

      使用JavaScript来实现:
function bsf(tree){
let quen = []; // 用来遍历的数组
// let result = []; // 遍历的结果
quen.push(tree.root);
// 从队列取,然后再追加
for(let i = 0;i<=quen.length-1;i++){
let k = quen[i];
if(k.children.length){
quen = quen.concat(k.children);
}
}
return quen;
}

3、深度优先搜索

先遍历完一个末尾节点,再遍历第二个末尾节点,例如:

    1
2 3
4 5 6
// 遍历出来的结果:124536

深度优先,最简单的方法就是递归遍历,但是不适合实际中使用:

使用栈来实现深度优先遍历

    1. 节点需要增加一些属性,来标识我们的计算状态,isDone是否已经检测过,isOver是否还有子节点未检测
    1. 建立一个栈,把树的根节点放进去。在准备一个数组,用来显示我们检测的路径
    1. 取出栈中最上面的节点,检测(检测完放进路径数组),然后将某个未检测的子节点,放入栈
    1. 重复3步骤,如果该节点,没有未检测的子节点,且自身已检测完毕,则将其上级节点,再次添加到 栈 中
    1. 重复3步骤

最新文章

  1. mySql 远程连接(is not allowed to connect to this MySQL server)
  2. tail -f 和 -F 的用法
  3. TCP/IP之四书五经[转自2003.12程序员]
  4. Node.js前端自动化工具:gulp
  5. MemcacheQ安装及使用
  6. ajax实际的应用
  7. HTML5每日一练之input新增加的URL类型与email类型应用
  8. web标准(复习)--4 纵向导航菜单及二级弹出菜单
  9. java_XML_比较【转】
  10. java动态代理实现与原理详细分析
  11. 剑指Offer(9)
  12. The connection string &#39;MysqlEF&#39; in the application&#39;s configuration file does not contain the require异常
  13. tr 设置margin、padding无效
  14. 转:Too many systemd: Created slice !
  15. selenium+python自动化93-Chrome报错:Python is likely shutting down
  16. VS Code折腾记 - (3) 多图解VSCode基础功能
  17. Nginx 虚拟主机 VirtualHost 配置
  18. struts 防止重复提交表单
  19. python__系统 : 进程
  20. 算法复习——floyd求最小环(poj1734)

热门文章

  1. 2019年2月5日训练日记关于int字节数,long int 字节数的讨论
  2. Codeforce 1155D Beautiful Array(DP)
  3. linux下编译boost的多线程程序
  4. aws mysql 开启慢查询日志, 并利用mysqlsla 分析
  5. golang server示例
  6. IoTClientTool自动升级更新
  7. thinkphp下的Webshell&amp;&amp;php过D盾一句话
  8. Linux(Ubuntu) MySQL数据库安装与卸载
  9. matlab数值数据和变量名
  10. Android 电池管理系统架构总结 Android power and battery management architecture summaries