LeetCode-129-求根节点到叶节点数字之和
求根节点到叶节点数字之和
题目描述:给你一个二叉树的根节点 root ,树中每个节点都存放有一个 0 到 9 之间的数字。
每条从根节点到叶节点的路径都代表一个数字:
- 例如,从根节点到叶节点的路径 1 -> 2 -> 3 表示数字 123 。
计算从根节点到叶节点生成的 所有数字之和 。叶节点 是指没有子节点的节点。
示例说明请见LeetCode官网。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/sum-root-to-leaf-numbers/
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
解法一:递归法
使用递归法解决此问题,递归过程如下:
- 首先,如果当前节点为null,说明是空树,直接返回;
- 如果当前节点不是nll,将当前节点的值添加到 path 中;
- 然后判断当前节点没有左右子节点,说明是叶子节点,将当前的路径值加到result中,然后返回;
- 如果当前节点的左节点不为空时,递归处理左节点;
- 如果当前节点的右节点不为空时,递归处理右节点。
最后,返回result即为结果值。
import com.kaesar.leetcode.TreeNode;
public class LeetCode_129 {
// 最终的累加值
private static int result = 0;
public static int sumNumbers(TreeNode root) {
sumNumbers(root, "");
return result;
}
/**
* 递归法
*
* @param root
* @param path
*/
private static void sumNumbers(TreeNode root, String path) {
// 如果当前节点为null,说明是空树,直接返回
if (root == null) {
return;
}
// 将当前节点的值添加到 path 中
path += root.val;
// 如果当前节点没有左右子节点,说明是叶子节点,将当前的路径值加到result中,然后返回
if (root.left == null && root.right == null) {
result += Integer.valueOf(path);
return;
}
if (root.left != null) {
// 当前节点的左节点不为空时,递归处理左节点
sumNumbers(root.left, path);
}
if (root.right != null) {
// 当前节点的右节点不为空时,递归处理右节点
sumNumbers(root.right, path);
}
}
public static void main(String[] args) {
TreeNode root = new TreeNode(4);
root.left = new TreeNode(9);
root.right = new TreeNode(0);
root.left.left = new TreeNode(5);
root.left.right = new TreeNode(1);
// 测试用例,期望输出: 1026
System.out.println(sumNumbers(root));
}
}
【每日寄语】 人生就像一场赌局,不可能把把都赢,只要筹码在自己手上,就永远都会有希望。
LeetCode-129-求根节点到叶节点数字之和的更多相关文章
- Java实现 LeetCode 129 求根到叶子节点数字之和
129. 求根到叶子节点数字之和 给定一个二叉树,它的每个结点都存放一个 0-9 的数字,每条从根到叶子节点的路径都代表一个数字. 例如,从根到叶子节点路径 1->2->3 代表数字 12 ...
- LeetCode 129. 求根到叶子节点数字之和(Sum Root to Leaf Numbers)
题目描述 给定一个二叉树,它的每个结点都存放一个 0-9 的数字,每条从根到叶子节点的路径都代表一个数字. 例如,从根到叶子节点路径 1->2->3 代表数字 123. 计算从根到叶子节点 ...
- Leetcode之深度优先搜索(DFS)专题-129. 求根到叶子节点数字之和(Sum Root to Leaf Numbers)
Leetcode之深度优先搜索(DFS)专题-129. 求根到叶子节点数字之和(Sum Root to Leaf Numbers) 深度优先搜索的解题详细介绍,点击 给定一个二叉树,它的每个结点都存放 ...
- Delphi 中的 XMLDocument 类详解(10) - 判断节点类型: 支节点、叶节点、文本节点、空节点
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, For ...
- [LeetCode]129. Sum Root to Leaf Numbers路径数字求和
DFS的标准形式 用一个String记录路径,最后判断到叶子时加到结果上. int res = 0; public int sumNumbers(TreeNode root) { if (root== ...
- [LeetCode] 129. 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] Sum root to leaf numbers求根到叶节点的数字之和
Given a binary tree containing digits from0-9only, each root-to-leaf path could represent a number. ...
- C语言递归之求根到叶节点数字之和
题目描述 给定一个二叉树,它的每个结点都存放一个 0-9 的数字,每条从根到叶子节点的路径都代表一个数字. 例如,从根到叶子节点路径 1->2->3 代表数字 123. 计算从根到叶子节点 ...
- 【二叉树-所有路经系列(根->叶子)】二叉树的所有路径、路径总和 II、路径总和、求根到叶子节点数字之和(DFS)
总述 全部用DFS来做 重点一:参数的设置:为Root,路径字符串,路径List集合. 重点二:步骤: 1 节点为null 2 所有节点的操作 3 叶子结点的操作 4 非叶节点的操作 题目257. 二 ...
随机推荐
- pandas目录
pandas目录 1 Lesson1--Pandas是什么 2 Lesson2--Pandas库下载和安装 3 Lesson3--Pandas Series结构 4 Lesson4--Pandas D ...
- 如何在Visual Studio中添加opencvsharp的可视化工具
这个文件放到这个目录下,就可以看mat对象查看了
- JoJoGAN 实践
JoJoGAN: One Shot Face Stylization. 只用一张人脸图片,就能学习其风格,然后迁移到其他图片.训练时长只用 1~2 min 即可. code paper 效果: 主流程 ...
- Redis为什么是单线程,高并发快的3大原因详解
出处知乎:https://zhuanlan.zhihu.com/p/58038188 Redis的高并发和快速原因 1.redis是基于内存的,内存的读写速度非常快: 2.redis是单线程的,省去了 ...
- 深入解析HashMap、HashTable (转)
集合类之番外篇:深入解析HashMap.HashTable Java集合类是个非常重要的知识点,HashMap.HashTable.ConcurrentHashMap等算是集合类中的重点,可谓&quo ...
- 开源项目(asyncHttpClient) get post 方式提交
get方式: 1 public static void requestNetForGetLogin(final Context context,final Handler handler ,final ...
- VC 获取已系统安装的字体
转载请注明来源:https://www.cnblogs.com/hookjc/ BOOL CALLBACK EnumFonts(CONST LOGFONT* lplf, CONST TEXTMETRI ...
- 解析视频真实地址播放 By HL
手思3.0启动,从手思1.0版的iOS2个人,到现在的N个人,如今又回来做手思了. 重新做自然就要比之前的更好,更强大,而视频播放页的效果相当的不乐观. 公司用的是优酷的视频连接,只能用webview ...
- ValueStack与ContentMap (ActionContext.getContext().getValueStack().set())
在方法 <action name="zilei" class="dtreeAction" method="zilei"> & ...
- docker中run和start的区别?
docker run 后面指定的是一个镜像 而docker start指定的是一个容器 docker run是利用镜像生成容器,并启动容器,而docker start是启动一个之前生成过的容器