【二叉树-所有路经系列(根->叶子)】二叉树的所有路径、路径总和 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. 计算从根到叶子节点 ...
随机推荐
- 基于小程序云Serverless开发微信小程序
本文主要以使用小程序云Serverless服务开发一个记事本微信小程序为例介绍如何使用小程序云Serverless开发微信小程序.记事本小程序的开发涉及到云函数调用.云数据库存储.图片存储等功能,较好 ...
- CAP 3.1 版本发布通告
前言 今天,我们很高兴宣布 CAP 发布 3.1 版本正式版.同时我们也很高兴的告诉你 CAP 在 GitHub 已经突破了 4000 Star. CAP 3000 Star 还是去年8月份的时候,最 ...
- 非对称加密与HTTPS(转)
序:HTTPS更安全,为什么? 因为HTTP协议本身毫无安全性可言. 当你访问一个纯HTTP的网站(以及与这个网站有任何网络交互)时,你发出去一个请求.在这个请求到达网站服务器的路途上,不管是你家的路 ...
- 第4篇 Scrum 冲刺博客(专✌️团队)
一.站立式会议 1.1会议图片 1.2成员完成情况 成员 昨天完成的任务 今天计划完成的任务 工作中的困难 陈忠明 按下载热度返回歌曲信息,与前端尝试交互 歌曲信息的上传/下载包 前后端交互问题 吴茂 ...
- Python输入input、输出print
1.输入input input是用于输入数据给变量.通过键盘输入的是字符串,如果需要其他格式,需要做转换.比如int.float类型数据,int() 如下是一个例子: 如果a不进行int转换,那么输入 ...
- 使用xShell 连接 docker 使用说明
方式一:当不知道docker里镜像的root密码的时候 1.从Docker Hub下载需要的镜像 docker pull 镜像名字 2.使用docker run命令启动容器 docker run -i ...
- activiti app 6.0 乱码
登录activiti-admin 乱码,解决后如下: 在catalina.bat文件中设置 -Dfile.encoding=UTF-8 1,windows 修改catalina.bat tomcat7 ...
- GeneralUpdate2.1.0发布
GeneralUpdate GeneralUpdate是基于.net framwork开发的一款(c/s应用)自动升级程序.该组件将更新的核心部分抽离出来方便应用于多种项目当中目前适用于wpf,控制台 ...
- 1. 不吹不擂,第一篇就能提升你对Bean Validation数据校验的认知
乔丹是我听过的篮球之神,科比是我亲眼见过的篮球之神.本文已被 https://www.yourbatman.cn 收录,里面一并有Spring技术栈.MyBatis.JVM.中间件等小而美的专栏供以免 ...
- URL的字符编码
摘要: 在通过URL访问HTTP SERVER的时候,通常会产生trace callback的异常,返回505的错误," VERSION IS NOT SUPPORTED ?" , ...