news 2026/8/21 23:26:47

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

作者头像

张小明

前端开发工程师

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/19 9:50:42

44、gawk 编译与安装全攻略

gawk 编译与安装全攻略 类 Unix 系统下编译和安装 gawk 通常,只需输入两条命令就可以编译并安装 gawk。不过,若使用的是不常见系统,可能需要自行针对系统配置 gawk。 1. 类 Unix 系统编译 gawk 一般的安装步骤适用于所有现代商业 Unix 衍生系统、GNU/Linux、基于 BSD 的…

作者头像 李华
网站建设 2026/8/20 9:36:41

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

一、背景意义 随着信息技术的迅猛发展&#xff0c;文本信息的获取与处理在各个领域中变得愈发重要。尤其是在全球化背景下&#xff0c;多语言文本的识别与理解成为了促进跨文化交流和信息共享的关键因素。传统的文本检测方法往往针对单一语言进行优化&#xff0c;难以满足多语…

作者头像 李华
网站建设 2026/8/21 23:20:24

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

一、背景意义 随着智能化技术的迅速发展&#xff0c;物体检测技术在各个领域中得到了广泛应用&#xff0c;尤其是在物流、仓储、制造等行业。物品堆叠检测作为物体检测中的一个重要分支&#xff0c;具有重要的实际意义。传统的物体检测方法在处理复杂场景时往往面临着准确性不足…

作者头像 李华
网站建设 2026/8/21 23:42:08

软件逆向加密视频专用播放器是如何检测到用户在录像

在很多加密视频的专用播放器都禁止录屏&#xff0c;检测到录屏会终止播放或禁止观看。出于好奇&#xff0c;分析下它是如何检测到在录屏的。目前分析到的播放器有两种检测方式&#xff0c;一种是检测程序标题另外一种是进程名字。一、检测标题播放器在播放视频时&#xff0c;如…

作者头像 李华
网站建设 2026/8/21 5:44:11

ubuntu网络管理功能分析

Ubuntu系统自带网络管理功能&#xff0c;但具体实现方式因版本&#xff08;桌面版/服务器版&#xff09;和安装类型而异&#xff0c;核心工具包括NetworkManager&#xff08;桌面版默认&#xff09;、systemd-networkd&#xff08;服务器版默认&#xff09;和netplan&#xff0…

作者头像 李华