news 2026/2/5 0:19:08

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

作者头像

张小明

前端开发工程师

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/1/29 11:47:57

【EF Core】“Code First”方案下以编程方式生成迁移

&#xff08;Migrations&#xff09;是个啥玩意&#xff1f;IT 界从来不缺造词人才&#xff0c;总喜欢造各种各样的词。之所以叫迁移&#xff0c;大概是因为使用它可以创建并在后期修订数据库。总之&#xff0c;说人话就是迁移可以生成一系列的 .NET 类&#xff0c;每个类代表一…

作者头像 李华
网站建设 2026/2/1 9:00:39

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

一、背景意义 随着社会经济的快速发展和工业化进程的加快&#xff0c;个人安全防护装备&#xff08;PPE&#xff09;的使用变得愈发重要。尤其是在建筑、制造、化工等高风险行业&#xff0c;PPE的佩戴不仅关乎工人的个人安全&#xff0c;也直接影响到企业的生产效率和安全管理水…

作者头像 李华
网站建设 2026/2/2 17:28:04

恒压恒流同步降压转换器 5.1V固定输出/可调输出YB2416E 30V/3A

YB2416 是一款输入耐压超过 40V&#xff0c;在 4.5V~30V 输入电压条件下正常工作&#xff0c;并且能够实现精确恒压以 及恒流的同步降压型 DC-DC 转换器。YB2416 内部集成 80mΩ的上管和 40mΩ的下管&#xff0c; 无需外部肖特基二极管&#xff0c;可连续输出 3A 电流。输出 3A…

作者头像 李华
网站建设 2026/1/29 11:42:57

如何利用JSP实现大文件上传的进度监控?

陕西Java程序员外包项目解决方案&#xff1a;原生JS大文件传输系统&#xff08;兼容IE9&#xff09; 兄弟&#xff0c;作为陕西的个人Java程序员&#xff0c;我太懂你现在的处境了——甲方要大文件上传&#xff0c;还要兼容IE9&#xff0c;预算卡得死死的&#xff0c;自己头发…

作者头像 李华
网站建设 2026/1/29 14:39:18

一文全知道,PCB制造相关的国际、国家和行业标准有哪些?

与PCB制造相关的标准&#xff0c;一般常用的标准体系大致可分为&#xff1a;国际通用标准&#xff08;IPC、IEC、ISO、UL 等&#xff09;、中国国家/行业标准&#xff0c;以及特定行业&#xff08;汽车、航空航天、医疗等&#xff09;的专用标准或体系要求。下面小班按体系分类…

作者头像 李华
网站建设 2026/2/3 19:17:34

wangEditor粘贴MathType公式转图片格式处理

从迷茫到突破&#xff1a;我在集团信创Word导入系统项目中的成长记 一、初遇难题&#xff1a;在技术迷宫中迷失方向&#xff08;2024年3月&#xff09; "小张&#xff0c;这个政府采购项目的标书必须在今天下班前完成格式调整&#xff01;"主管的催促声还在耳边回响…

作者头像 李华