js终止递归

终止递归

1. 实现目标:js 编写递归方法 查找指定节点;

2. 需解决问题:找到所需节点后,递归不会终止,直到所有节点遍历完成后才会停止,会消耗性能

3. 解决方案:优化递归方法,在找到所需节点后,直接终止递归

4. 代码:

// 假设我们有一个简单的树节点结构
function TreeNode(value, children = []) {
  this.value = value;
  this.children = children;
}

// 创建示例树
const root = new TreeNode(1, [
  new TreeNode(2, [new TreeNode(4), new TreeNode(5)]),
  new TreeNode(3, [
    new TreeNode(6),
    new TreeNode(7, [new TreeNode(8), new TreeNode(9)]),
  ]),
]);
// 错误写法(该写法虽然能找到正确节点,但找到正确节点后还是会遍历后续节点,对于某些"洁癖患者"来说不能容忍,而且需要定义外部变量不够优雅)
let result = null;
// 递归遍历树的函数
function traverseTreeErr(findVal, node = root) {
  console.log("traverseTreeErr", node); // 打印这里就可以知道 找到对应节点后,会继续遍历子节点
  // 检查当前节点的值是否匹配
  if (node.value === findVal) {
    result = node;
    return;
  }

  // 遍历子节点
  for (let child of node.children) {
    traverseTreeErr(findVal, child); // 递归调用
  }
}
traverseTreeErr(6);
console.log("traverseTreeErr.result", result);
// 正确写法(该写法 不需要定义外部变量且找到所需节点后立即终止了递归)
// 递归遍历树的函数
function traverseTree(findVal, node = root) {
  console.log("traverseTree", node);
  // 检查当前节点的值是否匹配
  if (node.value === findVal) {
    return node;
  }

  // 遍历子节点
  for (let child of node.children) {
    let result = traverseTree(findVal, child); // 递归调用
    if (result) {
      // 如果找到了匹配的节点,返回它
      return result;
    }
  }
  // 如果没有找到匹配的节点,返回null
  return null;
}
// 调用traverseTree来查找值为3的节点
console.log("traverseTree.result", traverseTree(6)); // 应该输出值为6的TreeNode对象

5. 效果图:

在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值