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

Leetcode 257-二叉树的所有路径

给你一个二叉树的根节点 root ,按 任意顺序 ,返回所有从根节点到叶子节点的路径。

叶子节点 是指没有子节点的节点。
在这里插入图片描述
在这里插入图片描述

题解

递归+回溯
遇到叶节点返回
每层的做法,list加上当前节点的string值

本题解将res作为全局变量,作为局部变量写法也是一样的
dfs的参数怎么确定? 需要进入下一层的参数(树节点/链表节点、中间结果集、最终结果集)
dfs怎么回溯? 进入某个分支的遍历后弹出当前路径的最后一个节点
dfs怎么返回? 遇到满足条件的结果集后将其加入最终结果集

代码最后暗含回溯
遍历完左子树,构建出合格的路径,加入解集,遍历右子树之前,路径要撤销最末尾的选择,如果path用的是数组,就会弹出最后一项。
这里用的字符串,保存了当前节点的路径,s+=root.val+"->"会创建一个新的字符串。递归右子树时,传入它即可,因为它不包含在递归左子树所拼接的东西

class Solution {
    //递归+回溯
    //遇到叶节点返回
    //每层的做法,list加上当前节点的string值


    //本题解将res作为全局变量,作为局部变量写法也是一样的
    //dfs的参数怎么确定?需要进入下一层的参数(树节点/链表节点、中间结果集、最终结果集)
    //dfs怎么回溯?进入某个分支的遍历后弹出当前路径的最后一个节点
    //dfs怎么返回?遇到满足条件的结果集后将其加入最终结果集
    List<String> res = new ArrayList<>();
    public List<String> binaryTreePaths(TreeNode root) {
        //List<String> res = new ArrayList<>();
        String s="";
        dfs(root,s);
        return res;
    }

   //递归终止条件:
    public void dfs(TreeNode root,String s) {
        //边界条件
        if(root==null){
            return;
        }
        
        //递归终止条件:当前节点为叶节点
        if(root.left==null&&root.right==null){
            s+=root.val;
            res.add(s);//遇到叶节点后将当前路径加入结果集
        }
        
        //不是叶节点,则需要+"->"并继续向下递归
        s+=root.val+"->";
/*此处暗含回溯
遍历完左子树,构建出合格的路径,加入解集,遍历右子树之前,路径要撤销最末尾的选择,如果path用的是数组,就会弹出最后一项。
这里用的字符串,保存了当前节点的路径,s+=root.val+"->"会创建一个新的字符串。递归右子树时,传入它即可,因为它不包含在递归左子树所拼接的东西。
*/
        dfs(root.left,s);
        dfs(root.right,s);
    }
    
}

http://www.kler.cn/a/286470.html

相关文章:

  • springboot使用rabbitmq
  • 【开源免费】基于SpringBoot+Vue.JS公交线路查询系统(JAVA毕业设计)
  • Vue3 结合 .NetCore WebApi 前后端分离跨域请求简易实例
  • Haproxy入门学习二
  • C# dataGridView1获取选中行的名字
  • sudo nvim /path/yourfile, sudo: nvim: command not found
  • 【Vue】router和route的区别
  • 不同材质的O型圈优缺点及其应用范围
  • 计算机网络端口
  • 《机器学习》 DBSCAN算法 原理、参数解析、案例实现
  • Flink窗口API使用教程
  • 2024年6月 青少年等级考试机器人实操真题二级
  • Web3常见概念
  • 系统分析师6:计算机网络
  • HTML学习笔记——用HTML记录学习过程5-全局属性
  • 如何用Java SpringBoot+Vue打造高效产品订单管理系统?
  • Markdown语法与Latex公式汇总
  • Linux网络:TCP UDP socket
  • Vue3: customRef自定义响应数据
  • Springboot + AOP + 注解做全局日志拦截并且排除敏感属性以及接口相应时间
  • Web:PHP序列化和反序列化
  • TLS握手性能测试工具:快速重置、多线程与高级统计分析(C/C++代码实现)
  • 一.海量数据实时分析-Doris入门和安装
  • 全能型AI“草莓”的未来展望:多样性VS专业性,谁将引领市场潮流?
  • 在Web服务应用中,如何编程使用Redis的缓存功能?包括缓存页面内容、缓存数据库查询结果、用户会话信息等代码分享
  • Adobe DC 2022提示无法识别的错误 - 解决方案