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

如何不使用循环递归查找树形嵌套数组?实现双向搜索

树形结构无循环递归查找实现

要实现树形结构的全维度(水平+垂直)查找,只需在你现有水平递归的基础上,增加对当前节点子节点的递归检查即可。核心逻辑是:

  • 先判断当前头部节点是否匹配目标值,匹配则直接返回
  • 若不匹配,优先递归查找当前头部节点的子节点(垂直维度)
  • 子节点无匹配结果时,再递归处理剩余的兄弟节点(水平维度)

具体实现代码如下:

function findInTree(targetName, nodes) {
  // 递归终止条件:节点数组为空,返回null
  if (!nodes.length) return null;

  const [head, ...tail] = nodes;

  // 1. 检查当前节点是否匹配目标
  if (head.name === targetName) {
    return head;
  }

  // 2. 递归查找当前节点的子节点(垂直维度)
  const foundInChildren = head.children ? findInTree(targetName, head.children) : null;
  if (foundInChildren) {
    return foundInChildren;
  }

  // 3. 递归查找剩余的兄弟节点(水平维度)
  return findInTree(targetName, tail);
}

逻辑说明

  1. 终止条件:当传入的节点数组为空时,说明当前分支无匹配项,返回null
  2. 节点匹配检查:先确认当前头部节点是否为目标节点,是则直接返回该节点
  3. 垂直维度遍历:如果当前节点存在子节点,递归遍历其子节点数组,找到匹配项立即返回
  4. 水平维度遍历:当前节点及其子节点都无匹配时,继续递归处理剩余的兄弟节点数组

使用示例

调用方式和你之前的水平查找逻辑一致:

// 查找目标节点
const targetNode = findInTree('child 1.1.1', children);
console.log(targetNode); // 输出匹配的节点对象 { name: 'child 1.1.1', children: [...] }

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 17:30:11