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;}}// 如果没有找到匹配的节点,返回nullreturn null;
}
// 调用traverseTree来查找值为3的节点
console.log("traverseTree.result", traverseTree(6)); // 应该输出值为6的TreeNode对象

5. 效果图:

在这里插入图片描述

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

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

相关文章

解决vscode终端不显示conda环境变量名称问题【详细步骤!实测可行!!】

最近在使用Visual Studio Code (VSCode) 时候,发现终端没有正确显示激活的conda环境名称,搜了一下,找到原因,记录一下,如果有人也遇到同样的问题,可以收藏一下。   分别两种情况,一是windows系…

一周学会Django5 Python Web开发 - Django5内置Auth认证系统-用户登录实现

锋哥原创的Python Web开发 Django5视频教程: 2024版 Django5 Python web开发 视频教程(无废话版) 玩命更新中~_哔哩哔哩_bilibili2024版 Django5 Python web开发 视频教程(无废话版) 玩命更新中~共计57条视频,包括:2024版 Django5 Python we…

JVM学习-内存泄漏

内存泄漏的理解和分类 可达性分析算法来判断对象是否是不再使用的对象,本质都是判断一上对象是否还被引用,对于这种情况下,由于代码的实现不同就会出现很多内存泄漏问题(让JVM误以为此对象还在引用,无法回收,造成内存泄…

旭日X3与英伟达Orin NX通过TCP传输图片

观前提醒:本文主要内容为使用Python在局域网内建立TCP连接并传输图片信息,计算机为一块旭日X3和一块英伟达Orin NX。 一、什么是TCP TCP(传输控制协议)是一种可靠的、面向连接的协议,它确保数据包的顺序传输和完整性…

关于教务排课的那些事

在办学过程中,你是否被如下问题困扰? 1、排课功率低: 为了确保师资资源得到充分利用,教务教师排课要求了解每一个全职和兼职教师,了解每一个人的时刻组织和带班状况,因而在排课的时分需求处理很多的信息&a…

【Java数据结构】二叉树详解(四)

🔒文章目录: 1.❤️❤️前言~🥳🎉🎉🎉 2.给定一个二叉树, 找到该树中两个指定节点的最近公共祖先 2.1第一种思路 2.2第二种思路 3.根据一棵树的前序遍历与中序遍历构造二叉树 4.根据一棵树的中序…

vite相关配置

1、vite开发环境和生产环境的环境变量配置 1、环境变量配置 vite本身会直接读取为什么会读取,因为含有dotenv第三方库 ,会直接读取 .env文件, 2、css模块化简单处理 css:{modules:{localsConvention: "camselCaseOnly" // 打包配…

机器学习_决策树与随机森林

决策树是一种常用的监督学习算法,既可以用于分类任务也可以用于回归任务。决策树通过递归地将数据集划分成更小的子集,逐步建立树结构。每个节点对应一个特征,树的叶子节点表示最终的预测结果。构建决策树的关键是选择最佳的特征来分割数据&a…

图文型LED显示屏的结构与安装

随着科技的不断进步,LED显示屏已成为商业广告、公共信息显示等领域不可或缺的一部分。图文型LED显示屏以其独特的优势和多样化的应用场景,受到了市场的广泛欢迎。本文将详细介绍图文型LED显示屏的结构特点、工作原理以及安装指南。 1、图文型LED显示屏的…

Python项目开发实战:看图猜成语小程序(案例教程)

一、项目背景与概述 在现代社会,随着智能手机的普及和移动互联网的快速发展,移动应用(App)已经成为人们日常生活中不可或缺的一部分。看图猜成语作为一种集知识性和娱乐性于一体的游戏,深受大众喜爱。本项目旨在开发一个基于Python的看图猜成语小程序,让用户能够通过简单…

跨境电商|Facebook Marketplace怎么做?

2016 年,Facebook打造了同名平台 Facebook Marketplace。通过利用 Facebook 现有的庞大客户群,该平台取得了立竿见影的成功,每月访问量将超过 10 亿。对于个人卖家和小企业来说,Facebook Marketplace是一个不错的销货渠道&#xf…

Java内部类、枚举类、注解类

Java 是一种面向对象的编程语言,它支持多种类型的类,包括内部类、枚举类和注解类 一、内部类(Inner Class): 内部类是定义在另一个类内部的类。它可以访问外部类的成员(包括私有成员)&#xff…

AIGC在移动APP开发中的应用及未来前景

随着科技的不断进步,人工智能生成内容(AIGC,Artificial Intelligence Generated Content)在移动应用开发中的应用越来越广泛。AIGC不仅能提高开发效率,还能带来更好的用户体验。本文将探讨AIGC在移动APP开发中的应用及…

通过ssr-echarts,服务端生成echarts图

ssr-echarts :一个开源项目,它能够服务端渲染 ECharts 图表,并直接生成 PNG 图片返回。该项目提供了多种主题,并且支持 GET 和 POST 请求。如果参数较多,建议使用 POST 方法。用户可以自己部署这个服务。 1. 服务端安装…

Three.js-实现加载图片并旋转

1.实现效果 2. 实现步骤 2.1创建场景 const scene new THREE.Scene(); 2.2添加相机 说明: fov(视场角):视场角决定了相机的视野范围,即相机可以看到的角度范围。较大的视场角表示更广阔的视野,但可能…

第 10 章 nodelet(自学二刷笔记)

重要参考: 课程链接:https://www.bilibili.com/video/BV1Ci4y1L7ZZ 讲义链接:Introduction Autolabor-ROS机器人入门课程《ROS理论与实践》零基础教程 10.4 nodelet ROS通信是基于Node(节点)的,Node使用方便、易于扩展,可以满足ROS中大多…

SBOM是如何帮助医疗器械制造商提高产品透明度的?

SBOM(软件物料清单)通过以下方式帮助医疗器械制造商提高产品透明度: 1. 详细记录软件组成 SBOM详细列出了医疗器械所使用的所有软件组件、版本、作者、许可证信息等。这使得制造商能够清晰地了解产品的软件组成,包括每个组件的来…

基于springboot实现民族婚纱预定系统项目【项目源码+论文说明】

基于springboot实现民族婚纱预定系统的设计演示 摘要 现代经济快节奏发展以及不断完善升级的信息化技术,让传统数据信息的管理升级为软件存储,归纳,集中处理数据信息的管理方式。本民族婚纱预定系统就是在这样的大环境下诞生,其可…

【Emgu CV教程】10.15、FillPoly()不规则形状填充颜色

文章目录 一、概念二、填充不规则图形1.原始素材2.代码3.运行结果 二、最大轮廓填充颜色1.原始素材2.代码3.运行结果 一、概念 图像的连通域是指图像中具有相同像素值并且位置相邻的像素组成的区域,连通域分析是指在图像中寻找出彼此互相独立的连通域并将其标记出来…

【最新鸿蒙应用开发】——Want信息载体

信息传递载体Want 1、概述 上一章节我们学习了UIAbility组件 【最新鸿蒙应用开发】——一篇搞懂什么是UIAbility-CSDN博客 ,其中组件间的交互传递信息的媒介就是Want,本章节我们来更加深入学习Want的相关知识。 Want是一种对象,用于在应用组…