zoukankan      html  css  js  c++  java
  • 第129题:求根到叶子节点数字之和

    一. 问题描述

    给定一个二叉树,它的每个结点都存放一个 0-9 的数字,每条从根到叶子节点的路径都代表一个数字。

    例如,从根到叶子节点路径 1->2->3 代表数字 123。

    计算从根到叶子节点生成的所有数字之和。

    说明: 叶子节点是指没有子节点的节点。

    示例 1:

    输入: [1,2,3]

        1

       /

      2   3

    输出: 25

    解释:

    从根到叶子节点路径 1->2 代表数字 12.

    从根到叶子节点路径 1->3 代表数字 13.

    因此,数字总和 = 12 + 13 = 25.

    示例 2:

    输入: [4,9,0,5,1]

        4

       /

      9   0

     /

    5   1

    输出: 1026

    解释:

    从根到叶子节点路径 4->9->5 代表数字 495.

    从根到叶子节点路径 4->9->1 代表数字 491.

    从根到叶子节点路径 4->0 代表数字 40.

    因此,数字总和 = 495 + 491 + 40 = 1026.

    二. 解题思路

    本体思路:采用层序遍历+递归的方法进行求解。

    步骤一:构建递归函数(root代表当前根节点,number代表从根节点到当前节点的值)

    步骤二:首先判断根节点是否有子节点,如果有,将根节点number*10+子节点的值放入新的递归函数中,直到所子节点遍历完毕,逐层返回所有值。

    三. 执行结果

    执行用时 :1 ms, 在所有 java 提交中击败了63.67%的用户

    内存消耗 :34.5 MB, 在所有 java 提交中击败了47.62%的用户

    四. Java代码

    class Solution {
        public int sumNumbers(TreeNode root) {
              if(root==null) {
                    return 0;
                }else {
                    return getNumber(root,root.val);
                }
        }
       public int getNumber(TreeNode root,int number) {
            if(root.left==null&&root.right==null) {
                return number;
            }
            int templeft=0;
            int tempright=0;
            if(root.left!=null) {
                templeft=getNumber(root.left,root.left.val+number*10);
            }
            if(root.right!=null) {
                tempright=getNumber(root.right,root.right.val+number*10);
            }
            return templeft+tempright;
            
        } 
    }
  • 相关阅读:
    STM32 ~ 查看系统时钟
    Allegro从.brd文件中导出器件封装
    Cadence原理图与Allegro交互
    Cadence关闭StartPage的方法
    emWin 移植
    python闭包
    python多线程之threading
    3.1决策树算法应用
    3.1决策树算法
    MyEclipse10 配置python的pyDev
  • 原文地址:https://www.cnblogs.com/xiaobaidashu/p/11939912.html
Copyright © 2011-2022 走看看