当前位置: 首页 > news >正文

js如何遍历查询一个颗树

近段时间去面试的时候,被面试官问到如何遍历查询一个颗树的时候,可能最近自己看了数据结构的书之后,隐隐约约就想到二叉树的三种排序(前序、中序、后序),但是当时自己没有想起这三种排序的名字,只是回答说好像有三种,但是当时面试官好像突然明白了,说你是不是想说前序、中序、后序,我回答说是的,然后面试官淡淡回了一句说不是,后面我回去查了下,才知道不是,突然间顿悟了,不就是我们经常所说的递归吗?感觉自己回答到点子上面
但是只回递归的话,无法加分的,从网上查了之后,才知道除了递归,还有循环,再拓展一点,大体分为深度优先遍历和广度优先遍历两种方法,下面我们逐一讲解。
我们正常的思维或许第一采取的就是深度优先遍历,然后用递归实现,如下:
先定义一颗树:

let tree = [
{id: '1',name: '节点1',children: [{id: '1-1',name: '节点1-1'}]
},
{id: '2',name: '节点2',children: [{id: '2-1',name: '节点2-1'},{id: '2-2',name: '节点2-2',children: [{id: '2-2-1',name: '节点2-2-1'}]}]
},
{id: '3',name: '节点3'
}
]

然后用递归实现:

function treeIterator(tree, func) {tree.forEach((node) => {func(node)node.children && treeIterator(node.children, func)})
}

用循环实现的方法:

function treeIterator(tree, func) {let node, curTree = [...tree]while ((node = curTree.shift())) {func(node)node.children && curTree.unshift(...node.children)}
}

打印出来:

节点1 节点1-1 节点2 节点2-1 节点2-2 节点2-2-1 节点3...

如果再问你用了什么数据结构,怎么回答呢?
答案:用了,先进后出!
广度优先遍历
循环实现:

function treeIterator(tree, func) {let node, curTree = [...tree]while ((node = curTree.shift())) {func(node)node.children && curTree.push(...node.children)}
}

打印出来:

节点1 节点2 节点3 节点1- 1节点2-1 节点2-2 节点2-2-1...

继续问用了什么数据结构?
答案:用了队列,先进先出!!

参考博客:https://blog.csdn.net/w544924116/article/details/119712713?spm=1001.2014.3001.5506

http://www.lryc.cn/news/326474.html

相关文章:

  • 【面试必备】针对一个案例,怎么测试
  • vue3 hooks之事件广播(支持跨标签页)
  • go中validate包使用教程
  • canvas画带透明度的直线和涂鸦
  • linux命令 curl忽略https证书
  • 游戏引擎中网络游戏的基础
  • ES6(ECMAScript 6)中常用的知识点总结(包含示例代码)
  • 老师人手必备的教学神器有哪些?这5款教学软件一定要知道!
  • 华为机试题-核酸检测人数
  • SQLAlchemy模型映射提示declarative_base() takes 0 positional arguments but 1 was given
  • linux系统Kubernetes工具ingress暴露服务
  • centos2anolis
  • Cesium安装部署运行
  • 【Android 内存优化】KOOM线程泄漏监控的实现源码分析
  • 【爬虫基础】第1讲 网络爬虫基本知识
  • scrapy爬虫框架
  • 【深度学习】基础知识
  • Electron应用自动更新实现及打包部署全攻略
  • 【爬虫基础】第6讲 opener的使用
  • Milvus 向量数据库:如何基于docker-compose在本地快速搭建测试环境
  • python --dejavu音频指纹识别
  • 完全二叉树的层序遍历[天梯赛]
  • C语言看完我这篇编译与链接就够啦!!!
  • 【React】react 使用 lazy 懒加载模式的组件写法,外面需要套一层 Loading 的提示加载组件
  • IDEA的Scala环境搭建
  • LeetCode第四天(448. 找到所有数组中消失的数字)
  • 【vivado】在原有工程上新建工程
  • (原型与原型链)前端八股文修炼Day5
  • 逐步学习Go-并发通道chan(channel)
  • 鸿蒙HarmonyOS应用开发之Node-API开发规范