一. 问题描述
给定一个二叉树,它的每个结点都存放一个 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; } }