求根节点到叶节点数字之和

题目描述:给你一个二叉树的根节点 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-求根节点到叶节点数字之和的更多相关文章

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

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

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

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

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

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

  4. Delphi 中的 XMLDocument 类详解(10) - 判断节点类型: 支节点、叶节点、文本节点、空节点

    unit Unit1; interface uses   Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, For ...

  5. [LeetCode]129. Sum Root to Leaf Numbers路径数字求和

    DFS的标准形式 用一个String记录路径,最后判断到叶子时加到结果上. int res = 0; public int sumNumbers(TreeNode root) { if (root== ...

  6. [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 ...

  7. [Leetcode] Sum root to leaf numbers求根到叶节点的数字之和

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

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

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

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

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

随机推荐

  1. pandas目录

    pandas目录 1 Lesson1--Pandas是什么 2 Lesson2--Pandas库下载和安装 3 Lesson3--Pandas Series结构 4 Lesson4--Pandas D ...

  2. 如何在Visual Studio中添加opencvsharp的可视化工具

    这个文件放到这个目录下,就可以看mat对象查看了

  3. JoJoGAN 实践

    JoJoGAN: One Shot Face Stylization. 只用一张人脸图片,就能学习其风格,然后迁移到其他图片.训练时长只用 1~2 min 即可. code paper 效果: 主流程 ...

  4. Redis为什么是单线程,高并发快的3大原因详解

    出处知乎:https://zhuanlan.zhihu.com/p/58038188 Redis的高并发和快速原因 1.redis是基于内存的,内存的读写速度非常快: 2.redis是单线程的,省去了 ...

  5. 深入解析HashMap、HashTable (转)

    集合类之番外篇:深入解析HashMap.HashTable Java集合类是个非常重要的知识点,HashMap.HashTable.ConcurrentHashMap等算是集合类中的重点,可谓&quo ...

  6. 开源项目(asyncHttpClient) get post 方式提交

    get方式: 1 public static void requestNetForGetLogin(final Context context,final Handler handler ,final ...

  7. VC 获取已系统安装的字体

    转载请注明来源:https://www.cnblogs.com/hookjc/ BOOL CALLBACK EnumFonts(CONST LOGFONT* lplf, CONST TEXTMETRI ...

  8. 解析视频真实地址播放 By HL

    手思3.0启动,从手思1.0版的iOS2个人,到现在的N个人,如今又回来做手思了. 重新做自然就要比之前的更好,更强大,而视频播放页的效果相当的不乐观. 公司用的是优酷的视频连接,只能用webview ...

  9. ValueStack与ContentMap (ActionContext.getContext().getValueStack().set())

    在方法 <action name="zilei" class="dtreeAction" method="zilei">   & ...

  10. docker中run和start的区别?

    docker run 后面指定的是一个镜像 而docker start指定的是一个容器 docker run是利用镜像生成容器,并启动容器,而docker start是启动一个之前生成过的容器