总述

  • 全部用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. SpringMVC的简介和工作流程

    一.简介 Spring MVC属于SpringFrameWork的后续产品,已经融合在Spring Web Flow里面.Spring 框架提供了构建 Web 应用程序的全功能 MVC 模块.Spri ...

  2. Java反射概念与基础

    反射机制是Java动态性之一,而说到动态性首先得了解动态语言.那么何为动态语言? 一.动态语言 动态语言,是指程序在运行时可以改变其结构:新的函数可以引进,已有的函数可以被删除等结构上的变化.比如常见 ...

  3. A Distributional Perspective on Reinforcement Learning

    郑重声明:原文参见标题,如有侵权,请联系作者,将会撤销发布! arXiv:1707.06887v1 [cs.LG] 21 Jul 2017 In International Conference on ...

  4. v-html渲染富文本图片宽高问题

    v-html渲染富文本v-html是用来渲染html的节点及字符串的,但是渲染后富文本里的图片宽高会溢出所在div的区域但是使用css直接给img是没有办法设置img的宽高的,需要使用深层级来给img ...

  5. Java--- 关于null的处理若干方法

    Java--- 关于null的处理若干方法 相信空指针是平时最常见的错误了,下面认识 null ,有助于解决 NPE 问题. nulll大小写敏感 关于这个问题,其实是对面试时候手写算法题时候需要注意 ...

  6. Java面试题(多线程篇)

    多线程 35.并行和并发有什么区别? 1.并行是指两个或者多个事件在同一时刻发生:而并发是指两个或多个事件在同一时间间隔发生. 2.并行是在不同实体上的多个事件,并发是在同一实体上的多个事件. 3.在 ...

  7. Inno Setup Compiler 中文使用教程

    一.概要 该文章主要解决,Inno Setup Compiler工具的使用问题. 如有什么建议欢迎提出,本人及时修改.[如有任何疑惑可以加Q群:580749909] 二.步骤 (1)下载地址:http ...

  8. 一篇文章高效定位iframe

    今天跟大家分享的是如何高效的定位iframe.我们来看一段最早的代码: # coding: utf-8from selenium import webdriverfrom time import sl ...

  9. python - 平方根格式化 + 字符串分段组合

    题目来源:python123 平方根格式化 描述 获得用户输入的一个整数a,计算a的平方根,保留小数点后3位,并打印输出.‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪ ...

  10. Struts+Servlet+JDBC网上手机销售系统

    项目描述 Hi,大家好,今天给大家分享一个<网上手机销售系统>.本系统一共分为前台和后台两大模块,两个模块之间虽然在表面上是相互独立的,但是在对数据库的访问上是紧密相连的,各个模块访问的是 ...