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

【LeetCode】--- 二叉树的所有路径

题目传送门

解法一:深度优先搜索(DFS)

算法原理

创建constructPaths方法。传递三个参数TreeNode root, String path, List<String> ret

方法返回值是void

如果当前节点不为null

新建 StringBuffer pathSB 变量

将当前节点的值添加到这个变量中,记得要调用一下toString方法Integer.toString(root.val)

接着判断当前节点是否为叶子节点,

若是说明当前路径已经探索完毕,将pathSB添加到答案中。

若不是,说明当前路径还没有探索完毕,添加 "->" 字符串。

接着再去递归左边

左边完了再去递归右边

class Solution {
    public List<String> binaryTreePaths(TreeNode root) {
        List<String> ret = new ArrayList<>();
        constructPaths(root, "", ret);
        return ret;
    }

    public void constructPaths(TreeNode root, String path, List<String> ret){
        if(root != null){
            StringBuffer pathSB = new StringBuffer(path);//SB代表当前变量是StringBuffer类型
            //后面需要转成String类型
            pathSB.append(Integer.toString(root.val));
            if(root.left == null && root.right == null){// 当前节点是叶子节点
                ret.add(pathSB.toString());// 把路径加入到答案中
            }else{
                pathSB.append("->");// 当前节点不是叶子节点,继续递归遍历
                constructPaths(root.left,pathSB.toString(),ret);
                constructPaths(root.right,pathSB.toString(),ret);
            }
        }
    }
}

复杂度分析 

 


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

相关文章:

  • 虹科分享 | 汽车NVH小课堂之听音辨故障
  • 高级编码参数
  • 园区管理智能化创新引领企业效能提升与风险控制新趋势
  • STM32 LED呼吸灯
  • 低代码产品表单渲染架构
  • Qt Ribbon使用实例
  • nginx分发请求超时切换服务
  • C#:25大前沿特性揭秘
  • Axure PR 9 旋转效果 设计交互
  • C#System.Threading.Timer使用实例
  • 有限元分析学习——Anasys Workbanch第一阶段笔记梳理
  • 定西市建筑房屋轮廓数据shp格式gis无偏移坐标(字段有高度和楼层)内容测评
  • 【Samba】Ubuntu20.04 Windows 共享文件夹
  • 【Unity3D】实现2D角色/怪物死亡消散粒子效果
  • 基于STM32的智能家用温控器设计
  • Linux中page、buffer_head、bio的关系
  • 【Pandas】pandas Series count
  • UiAutomator的详细介绍
  • 网络工程师 (3)指令系统基础
  • CSS核心
  • 洛谷P1030 [NOIP2001 普及组] 求先序排列(c++)详解
  • PydanticAI应用实战
  • aerodrome交易所读合约分析
  • 模板泛化类如何卸载释放内存
  • 【反悔堆】【hard】力扣871. 最低加油次数
  • 最近遇到的一些 Android 小问题