当前位置: 首页 > 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

相关文章:

js如何遍历查询一个颗树

近段时间去面试的时候,被面试官问到如何遍历查询一个颗树的时候,可能最近自己看了数据结构的书之后,隐隐约约就想到二叉树的三种排序(前序、中序、后序),但是当时自己没有想起这三种排序的名字,…...

【面试必备】针对一个案例,怎么测试

思考角度 测试用例设计万能公式功能测试(最重要)界面测试易用性测试性能测试安全性测试兼容性测试容错性测试 常见案例物品类水杯笔 软件类微信发送朋友圈功能 测试用例设计万能公式 在面试中经常会遇到的一类题是,给你一个具体的产品&#…...

vue3 hooks之事件广播(支持跨标签页)

/**** 同源下的全局事件总线,支持跨标签页通信* 第一步:注册事件* 第二步:广播事件* 第三步:处理事件*/// source:消息发起源href,将在跨标签页通信时传入 interface callback {(data: any, source: any): …...

go中validate包使用教程

文章目录 前言安装简单使用错误处理翻译器Validator库介绍校验语法常用标记自定义校验需求【校验车身颜色】前言 在go项目中,经常有校验数据合法性的需求,比如邮箱、年龄、车牌号、网址、字符串长度、金额、枚举范围等。一个好的校验包能帮我们少写很多ifelse,提高系统的可…...

canvas画带透明度的直线和涂鸦

提示&#xff1a;canvas画线 文章目录 前言一、带透明度的直线和涂鸦总结 前言 一、带透明度的直线和涂鸦 test.html <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content…...

linux命令 curl忽略https证书

curl https://www.baidu.com 会提示需要htttps证书&#xff0c;加 -k 即可&#xff0c;如下&#xff1a; curl -k https://www.baidu.com 如果要带头部&#xff0c;认证数据&#xff0c;加-H curl -s -k -H "Authorization: Bearer 651fasgassssgjage2" https:/…...

游戏引擎中网络游戏的基础

一、前言 网络游戏所面临的挑战&#xff1a; 一致性&#xff1a;如何在所有的主机内都保持一样的表现可靠性&#xff1a;网络传输有可能出现丢包安全性&#xff1a;反作弊&#xff0c;反信息泄漏。多样性&#xff1a;不同设备之间链接&#xff0c;比如手机&#xff0c;ipad&a…...

ES6(ECMAScript 6)中常用的知识点总结(包含示例代码)

ES6(ECMAScript 6)是JavaScript语言的最新版本,它在ES5的基础上做了很多增强和扩展&#xff0c;使JavaScript的编程模式更加现代化和优雅,不仅拓展了语言表达能力,也为编程带来了全新的编程范式和思维方式。在项目中使用ES6,让代码更加简洁、方便模块化和面向对象实现等&#x…...

老师人手必备的教学神器有哪些?这5款教学软件一定要知道!

教师职业生活中有哪些“神器”&#xff1f;对老师来说堪称神器的东西有很多&#xff0c;笔者虽不是老师&#xff0c;工作内容有所不同&#xff0c;但工作给人带来的心力消耗&#xff08;心累/压力/焦虑&#xff09;、身体上的疲惫&#xff08;困&#xff09;等等&#xff0c;这…...

华为机试题-核酸检测人数

题目 为了达到新冠疫情精准防控的需要&#xff0c;为了避免全员核酸检测带来的浪费&#xff0c;需要精准圈定可能被感染的人群。现在根据传染病流调以及大数据分析&#xff0c;得到了每个人之间在时间、空间上是否存在轨迹的交叉。现在给定一组确诊人员编号 (X1, X2, X3, …, n…...

SQLAlchemy模型映射提示declarative_base() takes 0 positional arguments but 1 was given

原码&#xff1a; #SQLAlchemy模型映射表结构. from sqlalchemy import create_engine,Column,Integer,String from sqlalchemy.ext.declarative import declarative_base# 数据库的变量 HOST 127.0.0.1 PORT 3306 DATA_BASE itbz USER root PWD 123456 DB_URL fmysqlpy…...

linux系统Kubernetes工具ingress暴露服务

Ingress Ingressingress详解创建 Ingress 资源部署 Ingress 控制器&#xff08;Nginx&#xff09;下载ingress controller创建ingress-controller测试ingress创建两个应用和service配置ingress转发文件 修改ingress转发类型 Ingress 暴露服务基于域名的虚拟主机 Ingress 》ing…...

centos2anolis

我的centos7原地升级到anolis7记录 注意&#xff1a;如果是桌面版请先卸载firefox&#xff0c;否则so文件冲突。 参考&#xff1a; CentOS 7和8Linux系统迁移到国产Linux龙蜥Anolis OS 8手册_disable pam_pkcs11 module in pam configuration-CSDN博客 关于 CentOS 迁移龙蜥…...

Cesium安装部署运行

目录 1.简介 2.Cesium项目下载 3.Cesium项目运行 4.cesium运行 1.简介 Cesium是国外一个基于JavaScript编写的使用WebGL的地图引擎。Cesium支持3D,2D,2.5D形式的地图展示&#xff0c;可以自行绘制图形&#xff0c;高亮区域&#xff0c;并提供良好的触摸支持&#xff0c;且支…...

【Android 内存优化】KOOM线程泄漏监控的实现源码分析

文章目录 线程monitor的流程怎么判断线程是否泄漏AddThreadJoinThreadExitThreadDetachThread 总结 前面我们通过研究KOOM的开源代码&#xff0c;研究了关于Java层和native层内存泄漏监控的实现原理。还剩下线程泄漏这部分没有进行分析&#xff0c;今天来补全它。整体下来&…...

【爬虫基础】第1讲 网络爬虫基本知识

什么是网络爬虫 网络爬虫&#xff08;Web crawler&#xff09;是一种自动化程序&#xff0c;用于在互联网上收集信息。它可以通过扫描和解析网页的超链接&#xff0c;自动访问网页并抓取所需的数据。网络爬虫常用于搜索引擎和数据采集工具中。 作用 通过有效的爬虫手段批量采…...

scrapy爬虫框架

scrapy爬虫框架 一、scrapy的概念作用和工作流程1、scrapy的概念2、scrapy框架的作用3、scrapy的工作流程&#xff08;重点&#xff09;3.1 回顾之前的爬虫流程3.2 改写上述流程3.3 scrapy的流程3.4 scrapy的三个内置对象3.5 scrapy中每个模块的具体作用 二、scrapy的入门使用1…...

【深度学习】基础知识

吴恩达DeepLearning Python # 1.numpy c c.ravel() 将多维数组拉平 # 2.time tic time.time() toc time.time() print(str(1000*(toc- tic))"ms")...

Electron应用自动更新实现及打包部署全攻略

Electron应用自动更新实现及打包部署全攻略 Electron自动更新原理配置更新服务器打包与发布更新全攻略实战步骤部署与测试部署更新测试更新流程错误处理与调试 高级特性与优化用户体验与反馈安全与隐私保护维护与持续集成性能优化结语 在现代跨平台桌面应用开发领域中&#xff…...

【爬虫基础】第6讲 opener的使用

在爬虫中&#xff0c;opener是一个用来发送HTTP请求的对象。它可以用来模拟浏览器发送请求&#xff0c;包括设置请求头、处理Cookie等操作。使用opener可以实现一些高级功能&#xff0c;如模拟登录、处理验证码等。 方法1&#xff1a; from urllib.request import Request,bu…...

C++ Move 构造与深拷贝的性能对比

C Move构造与深拷贝的性能对比 在现代C编程中&#xff0c;资源管理是影响程序性能的关键因素之一。传统的深拷贝虽然能确保数据独立性&#xff0c;但频繁复制大型资源可能导致性能瓶颈。C11引入的移动语义&#xff08;Move Semantics&#xff09;通过转移资源所有权而非复制&a…...

Qwen3-4B-Instruct-2507问题解决:部署中常见的5个错误及快速修复方法

Qwen3-4B-Instruct-2507问题解决&#xff1a;部署中常见的5个错误及快速修复方法 1. 部署准备与环境检查 在开始部署Qwen3-4B-Instruct-2507模型之前&#xff0c;确保您的环境满足以下基本要求&#xff1a; 硬件配置&#xff1a;推荐使用NVIDIA 4090D显卡&#xff08;24GB显…...

3个方法解决小说断更难题:Yuedu书源库让你实现阅读自由

3个方法解决小说断更难题&#xff1a;Yuedu书源库让你实现阅读自由 【免费下载链接】Yuedu &#x1f4da;「阅读」APP 精品书源&#xff08;网络小说&#xff09; 项目地址: https://gitcode.com/gh_mirrors/yu/Yuedu 你是否经历过这样的时刻&#xff1a;深夜追更的小说…...

OpenClaw飞书机器人:Qwen3-VL:30B多模态应用指南

OpenClaw飞书机器人&#xff1a;Qwen3-VL:30B多模态应用指南 1. 为什么选择OpenClawQwen3-VL:30B组合&#xff1f; 去年冬天&#xff0c;当我第一次尝试用AI助手处理团队飞书群里的图片报销单时&#xff0c;经历了惨痛的失败——要么识别错金额&#xff0c;要么把同事的午餐照…...

双系统安装完整指南——以双Win11为例

一、安装前的准备工作 1. 硬件与系统要求 CPU&#xff1a;支持 Windows 11&#xff08;Intel 8 代 / AMD Ryzen 2000 及以上&#xff09;主板&#xff1a; 支持 UEFI支持 TPM 2.0 磁盘&#xff1a; GPT 分区格式至少 120GB 空闲空间&#xff08;建议每个系统 ≥ 80GB&#xf…...

SAM3镜像部署:一键启动,开箱即用的文本引导分割工具

SAM3镜像部署&#xff1a;一键启动&#xff0c;开箱即用的文本引导分割工具 1. 快速入门指南 1.1 镜像概述 本镜像基于Meta最新发布的SAM3&#xff08;Segment Anything Model 3&#xff09;算法构建&#xff0c;通过二次开发集成了直观的Gradio Web交互界面。无需任何编程基…...

NUS-WIDE数据集实战:从原始文件到多模态数据集的完整预处理指南

1. NUS-WIDE数据集简介与下载指南 NUS-WIDE是一个经典的多标签图像数据集&#xff0c;由新加坡国立大学的研究团队构建。这个数据集包含了269,648个样本和81个类别&#xff0c;每个样本可能同时属于多个类别&#xff08;这就是多标签的含义&#xff09;。数据集最初是为了研究网…...

EcomGPT-中英文-7B电商模型Vue前端集成:打造智能电商管理后台

EcomGPT-中英文-7B电商模型Vue前端集成&#xff1a;打造智能电商管理后台 你是不是也遇到过这样的场景&#xff1f;作为电商运营&#xff0c;每天要写几十条商品描述、营销文案&#xff0c;绞尽脑汁也想不出新花样&#xff1b;面对海量的用户评论&#xff0c;想快速了解用户情…...

新手入门指南:在快马平台生成你的第一辆21届智能车基础代码

作为一个刚接触智能车竞赛的新手&#xff0c;第一次看到各种传感器和电机控制代码时确实有点懵。好在最近发现了InsCode(快马)平台&#xff0c;用它快速生成了一个基础版智能车项目&#xff0c;终于搞明白了几个核心模块的工作原理。这里把学习过程记录下来&#xff0c;希望能帮…...

Gazebo室内环境建模实战:从零构建到launch文件一键启动

1. Gazebo室内建模入门指南 第一次接触Gazebo室内建模时&#xff0c;我被它强大的功能震撼到了。作为一个机器人仿真平台&#xff0c;Gazebo不仅能模拟各种物理环境&#xff0c;还能让我们快速搭建测试场景。想象一下&#xff0c;你正在开发一个扫地机器人或者服务机器人&#…...