news 2026/6/10 9:02:22

数据结构之递归-如何巧妙利用递归函数的返回值

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
数据结构之递归-如何巧妙利用递归函数的返回值

下面以一个例题为例进行阐述。

给定一棵二叉树,返回所有表示从根结点到叶子结点路径的字符串。

解析:该过程用递归实现更好理解和处理,要得到由1为根,5和3为叶子节点的所有路径组成的字符串,我们只需要用1->拼接上其左右子树对应的路径即可,于是问题就向下延伸,变成了分别找以2和3为根结点的路径字符串,以此类推,直到树的叶子节点。这个过程是一个压栈(非叶子节点)和弹栈的过程(叶子节点),弹栈后就露出叶子节点对应的父节点(即临时根结点),之后开始组装需要字符串,待该父节点的所有子树的字符串都组装好了,逐步回溯到最终的根结点,完成最后的拼接。见下图二叉树,

输出结果为[“1->2->5”,“1->3”]。

import java.util.LinkedList; import java.util.List; public class LC257 { // 利用递归算法和回溯的思想,这是利用树的深度优先遍历 public List<String> binaryTreePaths(TreeNode root) { List<String> result = new LinkedList<String>(); // 递归终止条件1 if (null == root) return result; // 递归终止条件2,将叶子结点添加中间结果中,以便该叶子节点的父节点拼接临时字符串用 if (null == root.left && null == root.right) { result.add(String.valueOf(root.val)); return result; } // 递归处理当前结点的左子树 List<String> resultL = binaryTreePaths(root.left); // 将当前结点与其左子树结点连接 for (int l = 0; l < resultL.size(); ++l) result.add(String.valueOf(root.val) + "->" + resultL.get(l)); // 递归处理当前结点的右子树 List<String> resultR = binaryTreePaths(root.right); // 将当前结点与其右子树结点连接 for (int r = 0; r < resultR.size(); ++r) result.add(String.valueOf(root.val) + "->" + resultR.get(r)); return result; } public static void main(String[] args) { TreeNode root = new TreeNode(1); root.left = new TreeNode(2); root.right = new TreeNode(3); root.left.left = new TreeNode(4); root.left.right = new TreeNode(5); root.right.left = new TreeNode(6); System.out.println("result=" + new LC257().binaryTreePaths(root)); } }
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/9 23:50:45

【完整源码+数据集+部署教程】钢筋类型检测系统源码分享[一条龙教学YOLOV8标注好的数据集一键训练_70+全套改进创新点发刊_Web前端展示]

一、背景意义 随着建筑行业的快速发展&#xff0c;钢筋作为混凝土结构的重要组成部分&#xff0c;其类型的准确识别与分类对于工程质量的保障、施工安全的维护以及资源的合理利用具有重要意义。传统的钢筋识别方法多依赖人工目测和简单的测量工具&#xff0c;这不仅效率低下&am…

作者头像 李华
网站建设 2026/6/10 8:12:29

一张图看懂AI Agent的6种模式—MAS

大模型&#xff08;LLM&#xff09;狂飙突进的今天&#xff0c;我们经常听到“AI Agent&#xff08;智能体&#xff09;”这个词。如果说 ChatGPT 是一个超级大脑&#xff0c;那么 Agent 就是给这个大脑装上了手脚&#xff08;工具&#xff09;和耳朵&#xff08;感知&#xff…

作者头像 李华
网站建设 2026/6/10 19:44:32

JSP如何整合开源组件支持大文件分片上传?

大文件传输系统建设方案&#xff08;技术方案与代码示例&#xff09; 一、项目背景与核心需求 作为公司项目负责人&#xff0c;针对产品部门提出的100G级大文件传输需求&#xff0c;需构建一套高兼容性、高稳定性、全浏览器支持的解决方案。核心需求如下&#xff1a; 功能需求…

作者头像 李华
网站建设 2026/6/9 23:32:34

如何利用JSP实现大文件上传的步骤解析与教程?

大文件传输系统解决方案 - 超时代技术方案书 项目背景与需求分析 作为湖南某软件公司项目负责人&#xff0c;经过深入调研&#xff0c;我们发现现有开源组件难以满足以下核心需求&#xff1a; 超大文件传输&#xff1a;50G以上单个文件稳定传输文件夹层级保留&#xff1a;完…

作者头像 李华
网站建设 2026/6/10 3:15:36

jQuery如何优化大文件分块上传的性能与体验?

2023年XX月XX日 外包项目攻坚日志 - 20G级文件传输系统开发实录 &#xff08;关键词&#xff1a;信创环境兼容/海量文件存储/企业级断点续传/简历镀金项目&#xff09; 凌晨3点&#xff1a;需求风暴会议复盘 客户作为省级档案数字化服务商&#xff0c;提出的变态需求&#xff…

作者头像 李华
网站建设 2026/6/10 14:41:24

wangEditor支持Latex公式转MathML兼容导入

企业网站后台管理系统增强功能开发方案 项目背景 作为河南某国企的项目负责人&#xff0c;我负责的企业网站后台管理系统需要新增以下功能&#xff1a; 在Web编辑器工具栏中增加Word粘贴功能和Word文档导入功能实现微信公众号内容粘贴(自动下载公众号图片并上传到服务器)支持…

作者头像 李华