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. 效果图:

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

什么ERP系统?ERP哪些好用?ERP选型建议参考!

什么是ERP系统? 对于ERP系统的概念,其实很简单的。 假定你公司是贸易,产品只是采购(或者贴牌),不用生产,那么erp大概在你公司扮演的是这样的角色: 你的公司接了一笔订单&#xff…

【成品设计】基于STM32单片机的各类联网检测系统

《基于STM32单片机的各类联网检测系统》 所需器件: 医疗空气消毒监控系统的设计与实现 本文在分析了现有智慧医疗子系统相关设计的基础上,针对传统循环风紫外线消毒机信息化程度较低的缺陷,以消毒机的功能需求为切入点,采用物联网层级架构的思想,从软件设计与硬件…

ebay、亚马逊自养号支付下单如何避免账号关联风险?提高成功率。

在亚马逊、ebay平台上,为了降低账号被关联、砍单或F号的风险,卖家及工作室在养号下单时确实需要特别关注所使用的IP和浏览器环境。下面从几个方面进行深刻探讨: 一:IP选择及问题 目前市面上的IP类型多样,如luminati、…

PyQt5学习系列之基础知识“字典”

PyQt5学习系列之基础知识——字典” 啰嗦字典使用字典取值与赋值其他使用 总结 啰嗦 在项目中使用到解析数据存放在字典中,对字典中的数据进行数据转化。即需要使用到字典,并对字典中的数据取值。 字典 一种可变容器模型存储任意类型对象每个键值对&am…

超声波洗眼镜机是智商税吗?四款不能错过的超声波清洗机实力种草

在日常生活中,眼镜成为了我们不可或缺的伙伴,无论是阅读书籍、工作还是享受自然风光,清晰的视野总是至关重要。然而,眼镜上不可避免地会沾染灰尘、油脂甚至细菌,影响我们的视觉体验。传统的眼镜清洗方法虽然简单&#…

即时设计工具对决:Figma、Sketch与XD的优劣比较

最近几年,UI 设计工具出现了许多后起之秀,其中有四款更具代表性的UI设计软件:Sketch、Adobe XD、Figma 和 即时设计,这四个设计软件都有自己的优势。如果合作对您的UI设计过程至关重要,那么Figma 和 即时设计 它应该是…

wmware14虚拟机安装麒麟操作系统

1、首先去麒麟官网申请试用:https://www.kylinos.cn/support/trial.html?trial326339 ​ 我这边试用之后下载了两个操作系统:桌面版和服务器版 百度查了下:各个版本的区别 高级服务操作系统:银河麒麟高级服务器操作系统是一款面…

深圳比创达电子EMC|EMC与EMI一站式解决方案:攻克电磁兼容难题

在当今这个科技日新月异、电子产品层出不穷的时代,电磁兼容(EMC)与电磁干扰(EMI)问题愈发凸显其重要性。为了确保电子设备的正常运行,减少电磁干扰对环境和人体的影响,EMC与EMI一站式解决方案成…

【小工具】电磨机

BUSCH DREMEL3000 博世 琢美 技术规范

Springboot二屯村钓鱼场管理系统的设计-计算机毕业设计源码58167

摘 要 在互联网时代的来临,电子商务的骤起,一时间网络进行购物这一形式备受欢迎,到现在,网购更是普及。现如今各个行业也通过网购的方式来进行拓展业务,增加企业的知名度以及提升业绩,满足了用户像网购一样…

玩机进阶教程-------高通芯片机型常规fast模式线刷固件不进系统 高通分区表修复

有的小伙伴误操作手机分区或者刷写一些固件或者一次偶尔的卡机重启都有几率 导致手机分区表损坏。如果你一味的在fast模式线刷固件。开机还是卡第一屏或者重启进fast模式。这种故障的缘由无论你更换多个固件都无法解决。当然卡第一屏或者反复进fast模式不一定是分区表导致的这种…

论文AI率不达标?AI工具助你一臂之力

告诉大家一个非常残忍的答案,以后所有论文都会被查ai率的。 学术界不仅关注传统的抄袭问题,还增加了一项名为“AIGC检测”的指标。例如知网、维普等平台都能检测论文AI率。 用GPT写论文虽然重复率基本不用担心,但是AI率基本都较高&#xff…

【Vue】什么是props

文章目录 一、介绍二、代码示例三、props校验四、props校验完整写法五、props&data、单向数据流 一、介绍 Props 定义 组件上 注册的一些 自定义属性 Props 作用 向子组件传递数据 特点 可以 传递 任意数量 的prop可以 传递 任意类型 的prop 二、代码示例 父组件App…

Python3数据类型(新)详细介绍

文章目录 数据类型类型查看同时多个变量赋值标准数据类型1.数字(Number)2.字符串3.bool(布尔类型)4.元组元组的运算 运算运算* 运算元组的删除 5.列表(List)查找列表修改列表列表的切片列表是可以修改的列表的追加列表的插入列表的连接列表的删除列表的清空列表的复制 6.字典查…

AI绘画 Stable Diffusion 必备插件安装 菜鸟轻松成高手!

一个刚学AI绘画的小菜鸟怎么快速成为Stable Diffusionde的高手?答案就是SD插件,只要学会使用SD的各种插件,帮你写正向和负向提示词,修复人脸/身体/手指,高清放大图片,指定人物pose,图片微调等等…

MMUNet:形态学特征增强网络在结肠癌病理图像分割中的应用

MMUNet: Morphological feature enhancement network for colon cancer segmentation in pathological images. 发表在:Biomedical Signal Processing and Control2024--影响因子:3.137 南华大学的论文 论文地址:main.pdf (sciencedirecta…

大数据基础问题:在Hive中如何实现全增量统一的UDTF、内置函数、聚合、Join等计算引擎常见算子?

仁者见仁智者见智,每个程序员的方法都不一样,老的程序员和新的程序员之间的思维差距很大,新入公司的和老员工的代码差距也很大。 在Apache Hive中,实现全增量统一的用户定义表生成函数(UDTF)、内置函数、聚…

算法:101. 对称二叉树

对称二叉树 给你一个二叉树的根节点 root , 检查它是否轴对称。 示例 1: 输入:root [1,2,2,3,4,4,3] 输出:true示例 2: 输入:root [1,2,2,null,3,null,3] 输出:false提示: 树中节…

什么是OCR转写服务?

OCR(Optical Character Recognition,光学字符识别)转写服务是一种技术,用于将图像或扫描文档中的文字转换为可编辑的文本格式。这项服务通过识别图像中的文字,并将其转换成计算机可读的文本形式,从而使得用…

详解51种企业应用架构模式

导读:企业应用包括哪些?它们又分别有哪些架构模式?世界著名软件开发大师Martin Fowler给你答案 一、什么是企业应用 我的职业生涯专注于企业应用,因此,这里所谈及的模式也都是关于企业应用的。(企业应用还…