当前位置: 首页 > 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);}
}

相关文章:

  • 【图像处理入门】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)
  • 软件技术如何赚钱
  • 流媒体基础分析:延迟分析与安全性保障
  • 网站开发查找漏洞的工具/网络推广平台有哪些渠道
  • 潍坊专业网站建设哪家便宜/站长网站
  • intitle 郑州网站建设/免费建立个人网站
  • 新浪博客怎么给自己网站做链接吗/制作网站教程
  • 保安公司网站如何做/动态网站设计
  • 乐清网站推广/网站推广方案策划书2000