【二叉树-所有路经系列(根->叶子)】二叉树的所有路径、路径总和 II、路径总和、求根到叶子节点数字之和(DFS)
总述
- 全部用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)的更多相关文章
- Leetcode之深度优先搜索(DFS)专题-129. 求根到叶子节点数字之和(Sum Root to Leaf Numbers)
Leetcode之深度优先搜索(DFS)专题-129. 求根到叶子节点数字之和(Sum Root to Leaf Numbers) 深度优先搜索的解题详细介绍,点击 给定一个二叉树,它的每个结点都存放 ...
- Java实现 LeetCode 129 求根到叶子节点数字之和
129. 求根到叶子节点数字之和 给定一个二叉树,它的每个结点都存放一个 0-9 的数字,每条从根到叶子节点的路径都代表一个数字. 例如,从根到叶子节点路径 1->2->3 代表数字 12 ...
- LeetCode-129-求根节点到叶节点数字之和
求根节点到叶节点数字之和 题目描述:给你一个二叉树的根节点 root ,树中每个节点都存放有一个 0 到 9 之间的数字. 每条从根节点到叶节点的路径都代表一个数字: 例如,从根节点到叶节点的路径 1 ...
- [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 ...
- [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 ...
- [leetcode-129] 求根到叶子节点数字之和
(1AC) 给定一个二叉树,它的每个结点都存放一个 0-9 的数字,每条从根到叶子节点的路径都代表一个数字. 例如,从根到叶子节点路径 1->2->3 代表数字 123. 计算从根到叶子节 ...
- LeetCode 129. 求根到叶子节点数字之和(Sum Root to Leaf Numbers)
题目描述 给定一个二叉树,它的每个结点都存放一个 0-9 的数字,每条从根到叶子节点的路径都代表一个数字. 例如,从根到叶子节点路径 1->2->3 代表数字 123. 计算从根到叶子节点 ...
- Leetcode129. Sum Root to Leaf Numbers求根到叶子节点数字之和
给定一个二叉树,它的每个结点都存放一个 0-9 的数字,每条从根到叶子节点的路径都代表一个数字. 例如,从根到叶子节点路径 1->2->3 代表数字 123. 计算从根到叶子节点生成的所有 ...
- C语言递归之求根到叶节点数字之和
题目描述 给定一个二叉树,它的每个结点都存放一个 0-9 的数字,每条从根到叶子节点的路径都代表一个数字. 例如,从根到叶子节点路径 1->2->3 代表数字 123. 计算从根到叶子节点 ...
随机推荐
- 区分多个web driver实例
固然可以用加载不同cookie的办法,让3个帐号共享一个web driver登陆,但总感觉切换麻烦,干脆用了3个web driver实例.问题来了,如何区分?不是说程序里如何区分,机器比人聪明,知道外 ...
- put数据到topic
基于python3.6 # -*-coding:utf-8 *- __author__ = 'lc_yy' from pykafka import KafkaClient import logging ...
- python chardet模块查看字符编码方式
电脑配置:联想笔记本电脑 windows8系统 Python版本:2.7.8 本文章撰写时间:2014.12.25 作者:陈东陈 阅读说明: 1.本文都是先解释,后放图片: 2.文中斜体部分要么为需要 ...
- 实用的git log用法
git log可以很方便地查看日志,可以根据自己需要,将日志按照特定格式显示,或者输出某种格式. 最原始的输出样式: $ git log commit ca82a6dff817ec66f4434200 ...
- 洛谷 P3951 NOIP 2017 小凯的疑惑
洛谷 P3951 NOIP 2017 小凯的疑惑 题目描述 小凯手中有两种面值的金币,两种面值均为正整数且彼此互素.每种金币小凯都有 无数个.在不找零的情况下,仅凭这两种金币,有些物品他是无法准确支付 ...
- 新手学习java路线
关于新手学习java的路线 笔者也是根据这个路线学习的,希望对你们有所帮助. 首先你要确定你是学习java 并且能够踏踏实实的走下去.一定要多学习,我也可以一直陪你走下去的. 笔者一年工作经验,科班毕 ...
- 消息型中间件之RabbitMQ集群
在上一篇博客中我们简单的介绍了下rabbitmq简介,安装配置相关指令的说明以及rabbitmqctl的相关子命令的说明:回顾请参考https://www.cnblogs.com/qiuhom-187 ...
- C++字符串与指针
字符串初始化 在C++中基本数据类型并不包括string,string类型其实是一种类类型,通过STL函数库中的模板类basic_string 实例化得到. int main () { // stri ...
- Java通过反射加载的类,变量无法注入
//之前都是直接newInstance的到obj,类中的变量无法被注入//Object obj = aClass.newInstance(); //改成如下方式的到bean,变量就能顺利被注入 ,其他 ...
- JavaScript作用域与对象
1 - 作用域 1.1 作用域概述 通常来说,一段程序代码中所用到的名字并不总是有效和可用的,而限定这个名字的可用性的代码范围就是这个名字的作用域.作用域的使用提高了程序逻辑的局部性,增强了程序的可靠 ...