总述

  • 全部用DFS来做
  • 重点一:参数的设置:为Root,路径字符串,路径List集合。
  • 重点二:步骤:
    • 1 节点为null
    • 2 所有节点的操作
    • 3 叶子结点的操作
    • 4 非叶节点的操作

题目257. 二叉树的所有路径

给定一个二叉树,返回所有从根节点到叶子节点的路径。

例:输出: ["1->2->5", "1->3"]

代码

class Solution {
public List<String> binaryTreePaths(TreeNode root) {
List<String> list = new LinkedList<>();
String s = "";
getPaths(root,s,list);
return list;
} public void getPaths(TreeNode root,String path,List<String> ans){
//1 节点不为null
if(root!=null){
// 2 所有节点的操作
path+=root.val;
// 3 叶子节点的操作
if(root.left==null&&root.right==null){
ans.add(path);
}
else{
//4 非叶节点的操作
path+="->";
getPaths(root.left,path,ans);
getPaths(root.right,path,ans);
}
}
}
}

题目113. 路径总和 II

给定一个二叉树和一个目标和,找到所有从根节点到叶子节点路径总和等于给定目标和的路径。

题解

  • 步骤同上
  • 此外,注意由于参数path全局只有一份,所以当放入pathList集合时要拷贝再放入。
  • 此外,注意当叶子结点或非叶节点处理完,要path.removeLast()恢复现场。

代码

class Solution {
public List<List<Integer>> pathSum(TreeNode root, int sum) {
List<List<Integer>> pathList = new LinkedList<>();
LinkedList<Integer> list = new LinkedList<>();
getPaths(root,sum,list,pathList);
return pathList;
} public void getPaths(TreeNode root,int sum,LinkedList<Integer> path,List<List<Integer>> pathList){
//1 节点为null
if(root==null){return;} //2 所有节点的操作
sum-=root.val;
path.add(root.val); //3 叶子节点的操作
if(root.left==null&&root.right==null){
if(sum==0){pathList.add(new LinkedList<Integer>(path));}//一定要new
path.removeLast();
}else{
//4 非叶节点的操作
getPaths(root.left,sum,path,pathList);
getPaths(root.right,sum,path,pathList);
path.removeLast();
}
}
}

题目112. 路径总和

给定一个二叉树和一个目标和,判断该树中是否存在根节点到叶子节点的路径,这条路径上所有节点值相加等于目标和。

题解

  • 步骤同上
  • 特别地,回溯方法有返回值,返回值为是否有满足题意的路径。

代码

class Solution {
public boolean hasPathSum(TreeNode root, int sum) {
//1 节点为null
if(root==null){
return false;
} //2 所有节点的操作
sum -=root.val;
//3 叶子节点的操作
if(root.left==null&&root.right==null){
return sum==0;
}
//4 非叶节点的操作
return (hasPathSum(root.left,sum)||hasPathSum(root.right,sum));
}
}

题目 129. 求根到叶子节点数字之和

代码

class Solution {
private int sum; public int sumNumbers(TreeNode root) {
dfs(root,0);
return sum;
} private void dfs(TreeNode root,int pathSum){
if(root ==null){
return ;
}
pathSum=pathSum*10+root.val;
if(root.left==null&&root.right==null){
sum+=pathSum;
}
dfs(root.left,pathSum);
dfs(root.right,pathSum);
}
}

【二叉树-所有路经系列(根->叶子)】二叉树的所有路径、路径总和 II、路径总和、求根到叶子节点数字之和(DFS)的更多相关文章

  1. Leetcode之深度优先搜索(DFS)专题-129. 求根到叶子节点数字之和(Sum Root to Leaf Numbers)

    Leetcode之深度优先搜索(DFS)专题-129. 求根到叶子节点数字之和(Sum Root to Leaf Numbers) 深度优先搜索的解题详细介绍,点击 给定一个二叉树,它的每个结点都存放 ...

  2. Java实现 LeetCode 129 求根到叶子节点数字之和

    129. 求根到叶子节点数字之和 给定一个二叉树,它的每个结点都存放一个 0-9 的数字,每条从根到叶子节点的路径都代表一个数字. 例如,从根到叶子节点路径 1->2->3 代表数字 12 ...

  3. LeetCode-129-求根节点到叶节点数字之和

    求根节点到叶节点数字之和 题目描述:给你一个二叉树的根节点 root ,树中每个节点都存放有一个 0 到 9 之间的数字. 每条从根节点到叶节点的路径都代表一个数字: 例如,从根节点到叶节点的路径 1 ...

  4. [LeetCode] Sum Root to Leaf Numbers 求根到叶节点数字之和

    Given a binary tree containing digits from 0-9 only, each root-to-leaf path could represent a number ...

  5. [Swift]LeetCode129. 求根到叶子节点数字之和 | Sum Root to Leaf Numbers

    Given a binary tree containing digits from 0-9 only, each root-to-leaf path could represent a number ...

  6. [leetcode-129] 求根到叶子节点数字之和

    (1AC) 给定一个二叉树,它的每个结点都存放一个 0-9 的数字,每条从根到叶子节点的路径都代表一个数字. 例如,从根到叶子节点路径 1->2->3 代表数字 123. 计算从根到叶子节 ...

  7. LeetCode 129. 求根到叶子节点数字之和(Sum Root to Leaf Numbers)

    题目描述 给定一个二叉树,它的每个结点都存放一个 0-9 的数字,每条从根到叶子节点的路径都代表一个数字. 例如,从根到叶子节点路径 1->2->3 代表数字 123. 计算从根到叶子节点 ...

  8. Leetcode129. Sum Root to Leaf Numbers求根到叶子节点数字之和

    给定一个二叉树,它的每个结点都存放一个 0-9 的数字,每条从根到叶子节点的路径都代表一个数字. 例如,从根到叶子节点路径 1->2->3 代表数字 123. 计算从根到叶子节点生成的所有 ...

  9. C语言递归之求根到叶节点数字之和

    题目描述 给定一个二叉树,它的每个结点都存放一个 0-9 的数字,每条从根到叶子节点的路径都代表一个数字. 例如,从根到叶子节点路径 1->2->3 代表数字 123. 计算从根到叶子节点 ...

随机推荐

  1. PyUsb的使用记录--window中

    import usb.core import usb.util # find our device dev = usb.core.find(idVendor=0x03EB, idProduct=0x2 ...

  2. Python基础入门知识点——Python中的异常

    前言 在先前的一些章节里你已经执行了一些代码,你一定遇到了程序“崩溃”或因未解决的错误而终止的情况.你会看到“跟踪记录(traceback)”消息以及随后解释器向你提供的信息,包括错误的名称.原因和发 ...

  3. Android SDK 环境的搭建 --图形界面模式和命令行模式

    Android 开发首先就是要搭建开发环境,没有用过Eclipse(ADT)开发过,直接用的Android Studio,其中最主要的就是 Android SDK的安装和搭建,所以这里只是总结下And ...

  4. leetcode刷题记录——字符串

    242.有效地字母异位词 由于本题的字符串只包含 26 个小写字符,因此可以使用长度为 26 的整型数组对字符串出现的字符进行统计,并对比字母出现的次数是否一致.不再使用 HashMap. toCha ...

  5. 简单解析PAT、PMT的程序

    刚开始学习有关TS.PAT.PMT方面的内容,参考了别人的一些程序,然后写了一个简单的解析TS的小程序.如果有地方错误,请发邮件给我843036544@qq.com. #include<stdi ...

  6. openVswitch(OVS)源代码分析之工作流程(flow流表查询)

    原文链接: openVswitch(OVS)源代码分析之工作流程(flow流表查询)

  7. MacOS上的效率设置--Windows转移过来的小白设置

    1 Copy Path Mac上面的文件管理并不像Windows那么的直观,经常需要指定文件路径时,总是去右键-简介获取相当的费劲.Mac之所以称之为生产力工具,优势就在于此了.利用自动操作的功能就能 ...

  8. 七夕节来啦!AI一键生成情诗,去发给你的女朋友吧!

    [摘要] Hello大家好,今天就是七夕节了,为了增进和女朋友之间的情感,我写了一个自动生成情诗的AI: 大家可以在ModelArts尝试复现模型,然后快去发给你们的女朋友吧- 大家好,我是b站up主 ...

  9. Android低功耗蓝牙总结

    这里只列出重点原理内容,更加细节的内容请阅读前面文章 首先要搞清楚一点,我们在 Android 中通过 SDK 获得的蓝牙广播包是经过底层的 SDK 给我们处理过的,是一个长度为 62 的字节数组.这 ...

  10. 轻松应对并发,Newbe.Claptrap 框架入门,第四步 —— 利用 Minion,商品下单

    接上一篇 Newbe.Claptrap 框架入门,第三步 —— 定义 Claptrap,管理商品库存 ,我们继续要了解一下如何使用 Newbe.Claptrap 框架开发业务.通过本篇阅读,您便可以开 ...