news 2026/2/26 23:31:10

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

作者头像

张小明

前端开发工程师

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/2/8 11:47:31

使用Miniconda定制专属AI镜像,提升GPU算力利用率

使用Miniconda定制专属AI镜像,提升GPU算力利用率 在现代AI研发的战场上,算力就是生产力。一块A100 GPU每小时的使用成本可能高达数十元,但在许多团队中,这些昂贵资源却常常因“环境问题”而闲置——依赖冲突、CUDA版本不匹配、包…

作者头像 李华
网站建设 2026/2/16 7:22:26

监控运维面试题.运维工程师面试题

一、基础概念题(8 题) 监控的核心目标是什么?运维监控的 “黄金指标” 有哪些? 参考答案: 核心目标:提前预警故障、快速定位根因、保障业务连续性、优化资源利用率。 黄金指标(参考 Google SRE 标准): 可用性(Availability):服务正常运行时间占比(如 99.99%); 延…

作者头像 李华
网站建设 2026/2/26 6:59:41

好写作AI:你的“学术特种兵”,论文“战场”的破局神器

还在对着空白文档,感受“开头恐惧症”的暴击吗?据统计,超过76%的学生正经历着从“提笔难”到“完成难”的折磨-3。别怕,你的“学术特种兵”——好写作AI已就位,专为攻克论文“战场”而生。 好写作AI官方网址&#xff…

作者头像 李华
网站建设 2026/2/20 22:32:15

算法上新|智慧加油站新算法

继104项通用算法发布后,我们针对智慧加油站发布垂直专用算法,深度融合加油站安全运营核心需求,覆盖作业规范监管、风险预警、安全防护等全环节,以AI技术重构全域加油站监管体系。 算法包括: 通过AI算法集群&#xff0…

作者头像 李华
网站建设 2026/2/25 2:38:28

适合一个人干的外卖创业项目

引言数据显示外卖行业这些年一直保持着稳步增长的势头,市场空间还在持续扩大。其实创业不用非得搞大团队、投大资金,只要选对合适的区域,找准精准的定位,把细节做到位,一个人也能把外卖项目运营得有声有色,…

作者头像 李华
网站建设 2026/2/16 21:31:28

LobeChat现代化架构详解:基于Next.js的高性能聊天应用框架

LobeChat现代化架构详解:基于Next.js的高性能聊天应用框架 在AI助手迅速渗透日常生活的今天,用户早已不满足于“能对话”的机器人——他们期待的是反应迅速、功能丰富、安全可控且体验流畅的智能交互系统。然而,尽管大语言模型(LL…

作者头像 李华