写一个方法获取树形结构的所有父节点和子节点

news/2025/1/7 6:07:30/文章来源:https://www.cnblogs.com/ai888/p/18653062

在前端开发中,处理树形结构的数据是一个常见的任务。下面是一个简单的JavaScript方法,用于获取树形结构中指定节点的所有父节点和子节点。

首先,我们定义一个基本的树节点对象:

class TreeNode {constructor(value, children = []) {this.value = value;this.children = children;}
}

接下来,我们编写两个方法:getAllParentsgetAllChildrengetAllParents 方法用于获取指定节点的所有父节点,而 getAllChildren 方法用于获取指定节点的所有子节点。

由于树形结构通常是从根节点开始的,因此我们需要从根节点开始遍历以找到目标节点,并在此过程中收集父节点。同样地,为了获取所有子节点,我们需要递归地遍历目标节点的子树。

function getAllParents(root, target, parents = []) {if (!root) return null;// 如果当前节点是目标节点,返回父节点数组if (root === target) {return parents;}// 遍历子节点for (let child of root.children) {let found = getAllParents(child, target, [...parents, root]);if (found) {return found;}}// 没有找到目标节点,返回nullreturn null;
}function getAllChildren(node, children = []) {if (!node) return children;// 添加当前节点的子节点到数组中children.push(...node.children);// 递归遍历子节点for (let child of node.children) {getAllChildren(child, children);}return children;
}

使用示例:

// 创建一个简单的树形结构
let root = new TreeNode('A', [new TreeNode('B', [new TreeNode('D'),new TreeNode('E')]),new TreeNode('C', [new TreeNode('F'),new TreeNode('G')])
]);let targetNode = root.children[1].children[0]; // 目标节点是 'F'// 获取目标节点的所有父节点
let parents = getAllParents(root, targetNode);
parents.forEach(parent => console.log(parent.value)); // 输出: A C// 获取目标节点的所有子节点(在这个例子中,'F' 没有子节点,所以输出为空)
let children = getAllChildren(targetNode);
children.forEach(child => console.log(child.value)); // 无输出,因为 'F' 没有子节点

注意:在实际应用中,你可能需要根据具体的树形结构数据格式和需求来调整这些方法。例如,如果你的树形结构是以嵌套对象或数组的形式表示的,那么你可能需要稍微修改这些方法来适应你的数据结构。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/864290.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

遗留了很久的功能终于搞定/QTreeWidget自定义节点/添加删除修改分组

一、前言说明 这个功能看起来简单,实际上也确实简单,以前没搞的时候还以为很难,难点就是如何存储这个任意层级的树状列表信息,近期大环境经济很差,刚好有空把这个功能搞定,其实二维表格的方式存储这种任意层级树结构就可以,就是子节点需要指定父节点,父节点为空表示顶层…

2025年正在重塑行业的10款AI代理工具

序言:本文的作者列出来的这10款AI代理工具是您认可的吗? 作为一名深入AI开发领域超过十年的开发者,我见过无数工具声称要颠覆我们构建AI代理的方式。有些工具确实实现了夸下的海口——但更多的则没有。 经过几个月的亲身测试以及与同行开发者的讨论,我整理出了一份2025年真…

[cause]: TypeError: e_.createContext is not a function (Next.js 15)

开发 Next.js 项目遇到报错: [cause]: TypeError: e_.createContext is not a function 出现这个报错的原因是在 Next.js 项目中,在 Server Component 中使用了MUI组件,但是MUI组件没有做 SSR 适配就会导致这个报错。 解决办法 解决办法就是在文件顶部添加 use client 声明…

golang自带的死锁检测并非银弹

网上总是能看到有人说go自带了死锁检测,只要有死锁发生runtime就能检测到并及时报错退出,因此go不会被死锁问题困扰。 这说明了口口相传知识的有效性是日常值得怀疑的,同时也再一次证明了没有银弹这句话的含金量。 这个说法的杀伤力在于它虽然不对,但也不是全错,真真假假很…

2025多校冲刺省选模拟赛2

2025多校冲刺省选模拟赛2\(T1\) A. aw \(10pts/20pts\)部分分\(10 \sim 20pts\) :枚举每一种定向方案,略带卡常。点击查看代码 const int p=998244353; struct node {int nxt,to; }e[200010]; int head[100010],dis[1010][1010],a[100010],b[100010],g[2][100010],cnt=0; b…

jamovi 2.6 (Linux, macOS, Windows) - 统计软件

jamovi 2.6 (Linux, macOS, Windows) - 统计软件jamovi 2.6 (Linux, macOS, Windows) - 统计软件 open statistical software 请访问原文直链:https://sysin.org/blog/jamovi/ 查看最新版。原创作品,转载请保留出处。 作者主页:sysin.orgjamovi适用于桌面和云的开放式统计软…

读数据保护:工作负载的可恢复性26商用数据备份方案

商用数据备份方案1. 备份简史 1.1. 20世纪80年代中期大家都还没有意识到,运行着商用UNIX操作系统的大型工作环境里,应该配备一款商用的备份软件或某种自动的磁带系统 1.2. 1993年备份工作全都是通过shell脚本与cron job形式的计划任务来实现的1.2.1. 脚本总是假定服务器中需要…

OpenCV和OpenVX有什么联系和区别

OpenCV和OpenVX有什么联系和区别 联系和区别是:OpenCV是一个基于Apache2.0许可(开源)发行的跨平台计算机视觉和机器学习软件库。OpenVX 实现了跨平台加速处理,OpenVX在嵌入式和实时性系统中,可以更好地发挥它的优势,在某些场合配合OpenCV的强大功能,可以实现更好的效果。…

SPIR-V生态系统概述

SPIR-V生态系统SPIR-V生态系统,如图1-42所示。图1-42 SPIR-V生态系统 1.4.2 OpenVX路线图OpenVX路线图,如图1-43所示。图1-43 OpenVX路线图 OpenVX跨供应商视觉与推理 基于图形的高级抽象实现可移植、高效的视觉处理。 1)处理器供应商创建、优化和发布优化OpenVX的驱动程序。…

4本书推荐《智能汽车传感器:原理设计应用》、《AI芯片开发核心技术详解》、《TVM编译器原理与实践》、《LLVM编译器原理与实践》

4本书推荐《AI芯片开发核心技术详解》、《智能汽车传感器:原理设计应用》、《TVM编译器原理与实践》、《LLVM编译器原理与实践》由清华大学出版社资深编辑赵佳霓老师策划编辑的新书《AI芯片开发核心技术详解》已经出版,京东、淘宝天猫、当当等网上,相应陆陆续续可以购买。该…

Easysearch 可搜索快照功能,看这篇就够了

可搜索快照功能改变了我们对备份数据的查询方式。以往要查询备份数据时,要先找到备份数据所在的快照,然后在一个合适的环境中恢复快照,最后再发起请求查询数据。这个处理路径很长,而且很消耗时间。可搜索快照功能将大大简化该处理路径,节约时间。 角色设置 相信你对节点角…

基本共射极放大电路的分析

静态分析利用直流通路求Q点(静态工作点)\[I_{BQ}=\frac{V_{BB}-V_{BEQ}}{R_{b}} \]一般硅管\(V_{BE}=0.7V\),锗管\(V_{BE}=0.2V\),\(\beta\)已知 \[I_{CQ}=\beta I_{BQ} \]\[V_{CEQ}=(\frac{V_{CC}-I_{CQ}}{R_{c}}-I_{CQ})R_L \]动态分析交流通路分析画小信号等效模型\[r_{…