首页 > 其他分享 >【二叉树】Leetcode 129. 求根节点到叶节点数字之和【中等】

【二叉树】Leetcode 129. 求根节点到叶节点数字之和【中等】

时间:2024-05-31 13:32:50浏览次数:25  
标签:node TreeNode 数字 求根 二叉树 root 节点 left

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

  • 给你一个二叉树的根节点 root ,树中每个节点都存放有一个 0 到 9 之间的数字。
    每条从根节点到叶节点的路径都代表一个数字:

例如,从根节点到叶节点的路径 1 -> 2 -> 3 表示数字 123 。
计算从根节点到叶节点生成的 所有数字之和 。

叶节点 是指没有子节点的节点。

示例:

在这里插入图片描述
输入:root = [4,9,0,5,1]
输出:1026
解释:
从根到叶子节点路径 4->9->5 代表数字 495
从根到叶子节点路径 4->9->1 代表数字 491
从根到叶子节点路径 4->0 代表数字 40
因此,数字总和 = 495 + 491 + 40 = 1026

解题思路

递归思路

  • 使用DFS遍历每个节点时,将当前路径上的数字传递下去,并在到达叶节点时累加该路径代表的数字。

递归终止条件

  • 如果当前节点为空,返回0。
  • 如果当前节点是叶节点,返回当前路径代表的数字。

递归过程:

  • 对于当前节点,计算当前路径代表的数字,然后递归处理其左右子树,累加左右子树的结果。

Java实现

public class NodeSum {
    public static class TreeNode {
        int val;
        TreeNode left;
        TreeNode right;
        TreeNode(int x) { val = x; }
    }

    public int sumNumbers(TreeNode root) {
        return dfs(root, 0);
    }

    private int dfs(TreeNode node, int currentSum) {
        if (node == null) {
            return 0;
        }

        currentSum = currentSum * 10 + node.val;

        // 如果是叶节点,返回当前路径代表的数字
        if (node.left == null && node.right == null) {
            return currentSum;
        }

        // 递归处理左右子树,累加结果
        return dfs(node.left, currentSum) + dfs(node.right, currentSum);
    }

    public static void main(String[] args) {
        NodeSum nodeSum = new NodeSum();

        // 构建示例二叉树
        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);

        // 计算从根节点到叶节点生成的所有数字之和
        int result = nodeSum.sumNumbers(root);
        System.out.println("Sum of all numbers from root to leaf: " + result);  // 输出: 1026
    }
}

时间空间复杂度

  • 时间复杂度:O(n),其中 n 是二叉树中的节点数。每个节点仅被访问一次。
  • 空间复杂度:O(h),其中 h 是二叉树的高度。最坏情况下,递归栈的深度等于二叉树的高度。

标签:node,TreeNode,数字,求根,二叉树,root,节点,left
From: https://blog.csdn.net/FLGBgo/article/details/139348511

相关文章

  • [数据结构+二叉树+B-Tree和红黑树与B+Tree与hashMap原理+ concurrentHashMap的原理]析
    目录数据结构:你了解过哪些数据结构:这些数据结构的优缺点:二叉树:特点:二叉树适合做磁盘存储吗: 缺点:B-Tree:b-树的查找过程:思考:特点:B+Tree: B+树搜索过程与B树的查询过程没有区别。但实际上有三点不一样:(B+Tree优势)简述B+Tree:不经历IO的情况下,可以直接......
  • Leetcode 力扣106. 从中序与后序遍历序列构造二叉树 (抖音号:708231408)
    给定两个整数数组 inorder 和 postorder ,其中 inorder 是二叉树的中序遍历, postorder 是同一棵树的后序遍历,请你构造并返回这颗 二叉树 。示例1:输入:inorder=[9,3,15,20,7],postorder=[9,15,7,20,3]输出:[3,9,20,null,null,15,7]示例2:输入:inorder=[......
  • Leetcode 力扣105. 从前序与中序遍历序列构造二叉树 (抖音号:708231408)
    给定两个整数数组 preorder 和 inorder ,其中 preorder 是二叉树的先序遍历, inorder 是同一棵树的中序遍历,请构造二叉树并返回其根节点。示例1:输入:preorder=[3,9,20,15,7],inorder=[9,3,15,20,7]输出:[3,9,20,null,null,15,7]示例2:输入:preorder......
  • 3598. 二叉树遍历 已知前序 中序 求后序遍历
    #include<iostream>usingnamespacestd;voidpostOrder(stringpre,stringin)//定义后序遍历函数,参数为前序遍历和中序遍历结果字符串{if(in.size()){charroot=pre[0];//获取前序遍历结果的第一个字符作为根节点intk=in.find(......
  • 模型节点操作学习笔记(Appendix)实验1 -- Tflite int8 删除最后的Round节点 (持续更新)
    背景如下:我要删除Round节点,同时看了一下,Dequantize和Quantize也是没有必要的。所以最好一起删除。原始项目地址:PINTO0309/hand-gesture-recognition-using-onnx:ThisisahandgesturerecognitionprogramthatreplacestheentireMediaPipeprocesswithONNX.Simultane......
  • 模型节点操作学习笔记(1)--SavedModel详解
    参考:使用SavedModel格式 | TensorFlowCore(google.cn) (持续更新)   SavedModel是一个包含序列化签名和运行这些签名所需的状态的目录,其中包含变量值和词汇表。$ls{mobilenet_save_path}assetsfingerprint.pbsaved_model.pbvariablesassets目......
  • 完全二叉树查找
    描述有一棵树,输出某一深度的所有节点,有则输出这些节点,无则输出EMPTY。该树是完全二叉树。输入描述输入有多组数据,遇到0时终止输入。每组输入一个n(1<=n<=1000),然后将树中的这n个节点依次输入,再输入一个d代表深度。输出描述输出该树中第d层得所有节点,节点间用空格隔开,最后......
  • Jenkins主从节点配置,控制多台打包机
    概述:一台机器,控制多台打包机。一台机器(命名为master)作为master机器,安装部署Jenkins,并且安装ssh插件 Publish Over SSH。master机器上,通过ssh登录从节点机器(命名为:slave)。slave机器,不需要安装jenkins环境。 1、master机器Jenkins:https://www.jenkins.io/zh/download/,安装Jenk......
  • 二叉树的创建与遍历(附有C++实现详细代码)
    一、引言在计算机科学中,二叉树是一种常见的数据结构,它的每个节点最多有两个子节点,通常称为左子节点和右子节点。二叉树的应用广泛,包括但不限于搜索算法、排序算法、存储结构等。本文将详细讨论二叉树的创建与遍历方法,并通过代码示例进行说明。二、二叉树的基本概念在介......
  • 5.二叉树详解(附习题)
    1.二叉树链式结构的实现1.1 前置说明在学习二叉树的基本操作前,需先要创建一棵二叉树,然后才能学习其相关的基本操作。本文准备讲述一些二叉树的基础知识,此处手动快速创建一棵简单的二叉树,来快速进入二叉树操作学习,等二叉树结构了解的差不多时,我们反过头再来研究二叉树真正......