You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JavaScript递归查询树形节点路径功能异常如何修复

问题原因

你的深度优先遍历思路是正确的,出错的核心点是递归回溯时没有弹出当前节点:
你把当前节点push到visitedStack之后,遍历完它的所有子节点,它就不再属于后续其他分支的路径了,必须执行pop操作把它从栈顶移除,否则所有访问过的节点都会一直堆积在visitedStack里,导致后续的路径都包含之前遍历过的无关节点。

修复后的代码

调整递归函数,在遍历完当前节点的子节点后新增回溯弹出逻辑即可,同时将没必要的map改为普通循环遍历:

const findPath = (input = "world", data, visitedStack, dataStack) => {
  // 遍历当前层级所有节点
  for (const node of data) {
    // 当前节点入栈
    visitedStack.push({ id: node.id, name: node.name });
    // 匹配到关键词就存储当前完整路径
    if (node.name.toLowerCase().includes(input.toLowerCase())) {
      dataStack.push([...visitedStack]);
    }
    // 递归遍历当前节点的所有子节点
    findPath(input, node.children, visitedStack, dataStack);
    // 回溯操作:当前节点的所有子节点遍历完毕,弹出当前节点
    visitedStack.pop();
  }
};

// 调用方法
const result = [];
findPath("world", Data, [], result);
// 此时result就是你需要的目标结构

内容的提问来源于stack exchange,提问作者webber

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 19:15:03