news 2026/6/23 19:43:57

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

作者头像

张小明

前端开发工程师

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/23 19:51:09

46、深入探索编程符号、函数与操作:从基础到高级应用

深入探索编程符号、函数与操作:从基础到高级应用 1. 符号与运算符 在编程的世界里,各种符号和运算符是构建代码逻辑的基石。以下是一些常见符号及其用途: - 逻辑与比较运算符 : ! (非运算符)、 != (不等于)、 !~ (不匹配正则表达式)、 && (逻辑…

作者头像 李华
网站建设 2026/6/22 21:20:25

论AI时代下 “马扁” 子的趋势分析(一)

前言:问君能有几多愁,恰似一江春水向东流故事是这样的… 随着九紫离火大运拉开帷幕,愈演愈烈… 时间加速幻觉加重的背后,是对人性精心设计的一个个陷进,太多太多的痴男怨女,构成这副宏大的叙画. 不知觉中已深入局,立足根本,见真我… 北京的冬天,迎来2025年的第一场降雪,记忆中的…

作者头像 李华
网站建设 2026/6/23 0:37:06

7天拿下微软PowerBI证书真的太香了

&#x1f3af;微软认证&#xff1a;Power BI数据分析师助理&#xff0c;展示与使用 Microsoft Power BI 进行建模、可视化和分析数据的业务和技术要求相一致的方法和实践&#xff0c;是数据分析领域的敲门砖&#xff0c;特别适合想快速入门数据可视化工具的同学&#x1f49b;微…

作者头像 李华
网站建设 2026/6/23 17:14:02

JSP中如何设计大文件上传的交互界面与用户体验?

大文件上传系统开发指南&#xff08;基于原生JSSpringBoot&#xff09; 项目概述 大家好&#xff0c;我是一个在浙江奋斗的Java程序员&#xff0c;最近接了个"刺激"的外包项目 - 开发一个支持20G大文件上传下载的系统&#xff0c;还要兼容IE9这种上古浏览器。客户要…

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

wangEditor粘贴ppt幻灯片转存网页兼容处理

《.NET程序员的CMS升级记&#xff1a;Word一键粘贴公式全兼容&#xff0c;680元预算搞掂&#xff01;》 一、客户爸爸的需求 “小王啊&#xff0c;我们领导说每次从Word复制新闻到后台&#xff0c;表格变形、公式变乱码&#xff0c;连图片都丢了…” “张总&#xff0c;我调研…

作者头像 李华