news 2026/6/14 4:19:53

树形结构遍历与递归应用解析

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
树形结构遍历与递归应用解析

一、核心知识点概述

本案例通过递归算法实现树形结构的遍历,主要涉及以下知识点:

  1. 树形结构的递归遍历
  2. Set数据结构的去重特性
  3. 层级结果的合并逻辑
  4. 条件判断与递归终止条件

二、递归实现原理分析

举个例子
基础数据

const mockData = [{id: 1, labe: '父节点1', children: [{id:11,label:'子节点1',},{id:12,label:'子节点2',},{id:13,label:'子节点3',},],},{id: 2, labe: '父节点2', children: [{id:21,label:'子节点1',},{id:22,label:'子节点2',},{id:23,label:'子节点3',},],},{id: 3, labe: '父节点3', children: [{id: 31, label: '子节点1', children: [{id:311,label:'子节点1.1',},{id:312,label:'子节点1.2',},{id:313,label:'子节点1.3',},],},{id:32,label:'子节点2',},{id:33,label:'子节点3',},],},];
const selectKey = [1,11,12,22];

需求:根据给定选中的节点id值,自动填充其父级在节点id

1. 递归函数结构

constcollectAllParents=(nodes,checkedKeys)=>{constresult=newSet();nodes.forEach(item=>{// 基础判断:当前节点是否被选中if(checkedKeys.has(item.id))result.add(item.id);// 递归处理子节点if(item?.children?.length>0){constsubResult=collectAllParents(item.children,checkedKeys);// 合并子结果与当前节点if(subResult.size>0){result.add(item.id);// 父节点自动选中subResult.forEach(id=>result.add(id));}}});returnresult;};

2. 递归终止条件

  • 当节点无子节点(item.children.length === 0)时,递归自然终止
  • 当遍历完所有子节点后,返回当前层级的结果集

3. 递归执行流程

  1. 从根节点开始遍历
  2. 检查当前节点是否被选中
  3. 若存在子节点,递归处理子节点集合
  4. 合并子节点结果与当前节点结果
  5. 返回包含当前层级及子层级结果的集合

三、Set数据结构的作用

1. 去重特性

constcheckedKeys=newSet(selectKey);
  • 确保遍历过程中节点ID的唯一性
  • 提供O(1)时间复杂度的成员判断(has()方法)

2. 结果集的合并

subResult.forEach(id=>result.add(id));
  • 利用Set的自动去重特性合并多级结果
  • 避免手动去重的复杂性

四、层级结果合并机制

1. 父子节点关联逻辑

当子节点被选中时:

if(subResult.size>0){result.add(item.id);// 自动选中父节点// 合并子节点结果}
  • 父节点自动被标记为选中
  • 子结果集通过forEach合并到父级结果

2. 多层级数据穿透

// 从根节点到最深层子节点的递归穿透constsubResult=collectAllParents(item.children,checkedKeys);
  • 实现自底向上的结果收集
  • 确保所有父节点都被正确标记

五、条件判断逻辑

1. 当前节点选中判断

if(checkedKeys.has(item.id))result.add(item.id);
  • 直接判断当前节点是否在选中列表

2. 子节点结果判断

if(subResult.size>0){...}
  • 通过子结果集的大小判断是否存在被选中的子节点

六、 核心知识点

递归遍历每层涉及的变量值是相互独立的,在每一层收集之后进行合并整合

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/10 15:12:03

(开题报告/毕业设计)基于springboot+vue智慧校园管理系统毕业项目源代码

springbootvue智慧校园管理系统 摘 要 传统校园管理系统往往由多个独立的子系统组成,如教务管理等,这些系统之间缺乏有效的数据共享和交互,且各类审批流程多为纸质化操作,流程复杂且耗时,降低了工作效率。随着信息技…

作者头像 李华
网站建设 2026/6/13 16:23:04

基于Seed-Coder-8B-Base的IDE插件设计思路与实现路径

基于Seed-Coder-8B-Base的IDE插件设计思路与实现路径 在现代软件开发中,开发者每天面对的是越来越复杂的项目结构、日益增长的代码量和不断提速的交付压力。尽管主流IDE已经提供了诸如语法高亮、自动补全、重构支持等基础辅助功能,但这些工具大多停留在“…

作者头像 李华
网站建设 2026/6/14 0:05:33

apk pure安卓应用风险高?转向桌面端AI工具更安全

从高风险APK到本地AI:为何Qwen3-32B正成为安全智能的新选择 在某金融科技公司的内部审计中,一次例行检查发现多名员工的手机上安装了一款名为“AI代码助手”的应用——它能快速解释复杂算法、生成Python脚本,甚至自动补全SQL查询。听起来很高…

作者头像 李华
网站建设 2026/6/10 4:43:34

火山引擎AI大模型对比:Qwen3-32B表现亮眼

火山引擎AI大模型对比:Qwen3-32B表现亮眼 在当前企业级AI应用的落地浪潮中,一个核心矛盾日益凸显:如何在保证模型智能水平的同时,控制部署成本与推理延迟?过去几年,千亿参数闭源模型凭借强大性能主导市场&a…

作者头像 李华
网站建设 2026/6/10 11:46:55

51单片机TM1804控制RGB灯闪烁的问题

今天在调RGB灯带时发现:颜色,数量,都能正常显示 但是就是每隔一会,某颗RGB灯都会闪一下, 正常:异常:(某个灯闪烁)最后发现是,是因为中断的影响 因为51单片机没…

作者头像 李华
网站建设 2026/6/10 11:47:35

Th17 细胞的分化调控、功能特征

Th17 细胞Th17 细胞(T helper cell 17)是一类以分泌白介素 17(IL-17)为核心特征的 CD4⁺辅助性 T 细胞亚群,其在机体防御细胞外细菌、霉菌感染及自身免疫性疾病发生发展中具有关键作用,是免疫学领域的重要研…

作者头像 李华