news 2026/4/23 12:42:01

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

作者头像

张小明

前端开发工程师

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/4/15 9:22:14

10GB vs 600MB:我们弃用 GitLab,选择了这个轻量级神器

初的方案选择了业界熟知的 GitLab &#xff0c;但很快就遇到了瓶颈&#xff1a;仅仅是基础的代码托管功能&#xff0c;GitLab全套服务&#xff08;主进程、PostgreSQL 和 Redis &#xff09;在运行一段时间后&#xff0c;内存占用一度逼近 10GB。这对于我们的轻量级项目需求而言…

作者头像 李华
网站建设 2026/4/22 13:02:56

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

一、背景意义 随着工业化进程的加快&#xff0c;个人防护装备&#xff08;PPE&#xff09;在各类工作场所的安全管理中扮演着越来越重要的角色。尤其是在建筑、制造和运输等高风险行业&#xff0c;佩戴适当的防护装备能够有效降低工伤事故的发生率。然而&#xff0c;尽管许多企…

作者头像 李华
网站建设 2026/4/18 5:01:29

亲测好用!6大AI做PPT神器排行榜,第一名让你彻底告别熬夜加班

从PPT小白到同事眼里的“高手”&#xff0c;我只用对了这一个工具你有没有过这样的经历&#xff1a;明天就要汇报&#xff0c;今晚PPT还一片空白&#xff1b;手头的文档密密麻麻&#xff0c;不知道从何做起PPT&#xff1b;下载了无数模板&#xff0c;却总是“买家秀”和“卖家秀…

作者头像 李华
网站建设 2026/4/21 22:40:21

IDM v6.42.56 | 电脑最强的下载器,多线程,速度拉满,嗅探网页视频

Internet Download Manager&#xff08;简称IDM&#xff09;作为一款高效的下载管理工具&#xff0c; 凭借独特的多线程分割下载与断点续传机制&#xff0c;实现了下载效率的显著提升&#xff0c;对大型文件的处理优势尤为明显。 该软件支持在网络故障等突发情况下恢复中断的…

作者头像 李华
网站建设 2026/4/17 16:57:29

DeepSeek-Prover-V2:数学推理AI的架构革新与性能突破

DeepSeek-Prover-V2&#xff1a;数学推理AI的架构革新与性能突破 【免费下载链接】DeepSeek-Prover-V2-7B 项目地址: https://ai.gitcode.com/hf_mirrors/deepseek-ai/DeepSeek-Prover-V2-7B 在人工智能与形式化数学的交叉前沿&#xff0c;DeepSeek团队正式推出第二代定…

作者头像 李华