博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
深度遍历与广度遍历的理解
阅读量:5343 次
发布时间:2019-06-15

本文共 1043 字,大约阅读时间需要 3 分钟。

前言

     今天夜间接到某BAT面试电话,问了些算法的问题,说实话,感觉有点蒙逼,尤其是被问到了节点树遍历的问题。

      对于树形遍历,在平常开发中很少碰到,多数碰到的是对象的深复制,也就想当然的递归调用了,根本没考虑过性能方面的问题。

      当面试官让我用另一种方式进行遍历,还有其他方式?(提示: 模拟栈或队列来实现),what‘s the fuck? I am falling in my mind without idea,

      其实面试要考察的算法是广度遍历,那么咱先从深度遍历也就是递归调用说起。

 

深度遍历

    故名思意,深度即纵向,

 

   

      递归调用的遍历顺序如下:

      ① 父亲

      ② 儿子 ->  孙子 ->  哒了孙 - >..... 

      ③ 姑娘 -> 外孙子 -> ....

      ④ 小儿子 -> ....

-------------代码实现------------

 

广度遍历

    故名思意,广度即横向,想办一辈儿传一辈儿的(这么说吧,父亲不结婚,那来的儿子,儿子不结婚,哪来的孙子,先让同辈儿人都结婚,然后再轮到下一辈儿,辈儿辈儿这样)

   怎么保证先后顺序呢? 先出生的,先结婚,老一辈都结完了,才能轮到下一辈,我的天啊,队列呀,数组啊,然后明啦.

   队列: 先进先出: push 和 shift 模拟数组

function rangeInterator(node){  var arr = [];  arr.push(node);  while(arr.length > 0){  	node = arr.shift();  	console.log(node);  	if(node.children.length > 0){  	  for (var i = 0; i < node.children.length; i++){  		arr.push(node.children[i]);  	  }  	}  }}console.time('rangeInterator');rangeInterator(node);console.timeEnd('rangeInterator');

 

两种方式比较:别看广告,看疗效...

 

转载于:https://www.cnblogs.com/xfz1987/p/7776233.html

你可能感兴趣的文章
回到顶部浮窗设计
查看>>
C#中Monitor和Lock以及区别
查看>>
【NOIP2017】奶酪
查看>>
$ 一步一步学Matlab(3)——Matlab中的数据类型
查看>>
5.6.3.7 localeCompare() 方法
查看>>
Linux下好用的简单实用命令
查看>>
常用web字体的使用指南
查看>>
描绘应用程序级的信息
查看>>
poj2406-Power Strings
查看>>
2018/12/18 JS会像Linux一样改变编程
查看>>
php环境搭建脚本
查看>>
FTP主动模式与被动模式说明
查看>>
php 编译常见错误
查看>>
MES架构
查看>>
【Python3 爬虫】15_Fiddler抓包分析
查看>>
高性能JavaScript-JS脚本加载与执行对性能的影响
查看>>
关于标签之间因为换行等问题造成的空白间距问题处理
查看>>
hdu 2767(tarjan)
查看>>
sklearn之分类模型混淆矩阵和分类报告
查看>>
MySQL各存储引擎
查看>>