news 2026/8/6 17:47:46

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

作者头像

张小明

前端开发工程师

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/8/6 2:39:10

42、gawk 扩展功能与 awk 语言进化全解析

gawk 扩展功能与 awk 语言进化全解析 1. gawk 扩展功能概述 gawk 提供了丰富的扩展功能,这些扩展能显著增强其处理能力。下面将详细介绍一些常用的扩展功能。 2. 进程等待相关函数 waitpid() :该函数接收一个数字参数,即要等待的进程 ID,返回值是 waitpid() 系统调用…

作者头像 李华
网站建设 2026/8/6 2:23:46

数据结构之二分搜索树 Binary Search Tree

二分搜索树&#xff08;BST&#xff09;是一种有序的二叉树&#xff0c;也是数据结构中最常用的树形结构之一&#xff0c;其核心特性是 “左小右大”&#xff0c;这使得它的查找、插入、删除操作的平均时间复杂度可达 \(O(\log n)\)&#xff08;最坏为 \(O(n)\)&#xff0c;退化…

作者头像 李华
网站建设 2026/8/4 23:51:22

基于知识图谱+深度学习的大数据NLP医疗知识问答可视化系统(全网最详细讲解及源码/建议收藏)

基于知识图谱深度学习的大数据NLP医疗知识问答可视化系统&#xff08;全网最详细讲解及源码/建议收藏&#xff09;一、项目概述二、实现知识图谱的医疗知识问答系统基本流程三、项目工具所用的版本号四、所需要软件的安装和使用五、系统实现数据的抓取与存储贪心算法策略知识图…

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

网页页面如何设计JSP大文件上传的暂停与继续功能?

大文件传输系统解决方案 作为浙江IT行业软件公司项目负责人&#xff0c;我们面临的大文件传输需求具有很高的技术挑战性。以下是我针对该需求的专业解决方案分析。 需求分析总结 超大文件传输&#xff1a;单文件100GB&#xff0c;文件夹层级结构保持高稳定性&#xff1a;支持…

作者头像 李华
网站建设 2026/8/5 5:35:25

OpenAI Code Interpreter (“Coworker“) 架构审计与安全取证分析

.12.14 晚上发生的 OpenAI "Code Interpreter"&#xff08;内部代号 "Coworker"&#xff09;文件系统泄露事件&#xff0c;为全球人工智能与软件工程社区提供了一个前所未有的窗口&#xff0c;得以窥探当前最先进的大语言模型&#xff08;LLM&#xff09;执…

作者头像 李华
网站建设 2026/8/6 15:15:46

wangEditor导入pdf支持文本搜索功能实现

企业级Word内容导入与粘贴解决方案设计 项目需求概述 作为福建省科技小巨人领军企业的项目负责人&#xff0c;我正在为集团多个项目寻找一个能够满足以下核心需求的解决方案&#xff1a; 功能需求&#xff1a; Word粘贴功能&#xff08;保留格式、图片自动上传&#xff09;Wo…

作者头像 李华