当前位置: 首页 > news >正文

LeetCode[257]二叉树的所有路径

思路:

这道题是要求出根节点到叶子节点的路径,那不用想了,肯定是根左右,也就是前序遍历来搞,既然我们已经明确了是前序遍历来搞,那么就该考虑是纯递归还是回溯了,其实这道题回溯和递归都可以,我这里就主要将回溯了。

回溯首先就要明确退出递归的条件是什么,肯定是左右子节点都为空,这就是叶子节点的情况,我们可以直接计算结果添加到结果集中,然后递归左右子树,递归之后做回溯,就是这么简单,递归和回溯是同时进行的。

代码:

回溯解法:

/*** Definition for a binary tree node.* public class TreeNode {*     int val;*     TreeNode left;*     TreeNode right;*     TreeNode() {}*     TreeNode(int val) { this.val = val; }*     TreeNode(int val, TreeNode left, TreeNode right) {*         this.val = val;*         this.left = left;*         this.right = right;*     }* }*/
class Solution {public List<String> binaryTreePaths(TreeNode root) {List<String> res = new ArrayList<>();if(root == null) return res;List<Integer> path = new ArrayList<>();travelsal(root, path, res);return res;}public void travelsal(TreeNode root, List<Integer> path, List<String> res){path.add(root.val);if(root.left == null && root.right == null){StringBuilder sb = new StringBuilder();for(int i=0;i<path.size()-1;i++){sb.append(path.get(i)).append("->");}sb.append(path.get(path.size()-1));res.add(sb.toString());}if(root.left != null){travelsal(root.left, path, res);path.remove(path.size()-1);}if(root.right != null){travelsal(root.right, path, res);path.remove(path.size()-1);}}}

递归解法:

class Solution {List<String> result = new ArrayList<>();public List<String> binaryTreePaths(TreeNode root) {deal(root, "");return result;}public void deal(TreeNode node, String s) {if (node == null)return;if (node.left == null && node.right == null) {result.add(new StringBuilder(s).append(node.val).toString());return;}String tmp = new StringBuilder(s).append(node.val).append("->").toString();deal(node.left, tmp);deal(node.right, tmp);}
}

http://www.dtcms.com/a/224543.html

相关文章:

  • 【图像处理入门】3. 几何变换基础:从平移旋转到插值魔法
  • 基于开源AI大模型AI智能名片S2B2C商城小程序源码的销售环节数字化实现路径研究
  • 接口性能优化
  • MySql(九)
  • 达梦的TEMP_SPACE_LIMIT参数
  • Vue-过滤器
  • 【PhysUnits】15.6 引入P1后的左移运算(shl.rs)
  • java8集合操作全集
  • linux 1.0.7
  • 《深入解析SPI协议及其FPGA高效实现》-- 第一篇:SPI协议基础与工作机制
  • MySQL索引与性能优化入门:让查询提速的秘密武器【MySQL系列】
  • AI 的早期萌芽?用 Swift 演绎约翰·康威的「生命游戏」
  • [蓝桥杯]机器人塔
  • Day 41
  • HackMyVM-Art
  • 关于win10系统中环境变量path变成一行显示的问题
  • Target店铺应该如何入驻?
  • Python训练营打卡Day41(2025.5.31)
  • 软件技术如何赚钱
  • 流媒体基础分析:延迟分析与安全性保障
  • Java Spring 之监听器(Listener)详解与实战
  • SoftThinking:让模型学会模糊思考,同时提升准确性和推理速度!!
  • JVM 基础 - JVM 内存结构
  • homework 2025.03.31 chinese(class 3)
  • 【Netty系列】解决TCP粘包和拆包:LengthFieldBasedFrameDecoder
  • c++第三章练习题
  • Java工厂方法模式详解
  • Python训练打卡Day38
  • 蔡司(ZEISS)借助Celonis构建流程智能平台,为S/4HANA迁移奠定基础
  • 企业微信接入说明