Description
Given a binary tree containing digits from 0-9 only, each root-to-leaf path could represent a number.
An example is the root-to-leaf path 1->2->3 which represents the number 123.
Find the total sum of all root-to-leaf numbers.
Note: A leaf is a node with no children.
Example:
Input:
[1,2,3]
1
/ \
2 3
Output:
25
Explanation:
The root-to-leaf path 1->2 represents the number 12.
The root-to-leaf path 1->3 represents the number 13.
Therefore, sum = 12 + 13 = 25.
Example 2:
Input:
[4,9,0,5,1]
4
/ \
9 0
/ \
5 1
Output:
1026
Explanation:
The root-to-leaf path 4->9->5 represents the number 495.
The root-to-leaf path 4->9->1 represents the number 491.
The root-to-leaf path 4->0 represents the number 40.
Therefore, sum = 495 + 491 + 40 = 1026.
分析
题目的意思是:给定一棵二叉树,从根节点到叶子节点组成一个数字,然后求和。
- 先序遍历每个结点,用一个sum变量保存求和的值,每一层都比上层和*10+当前根节点的值。
代码
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
int sumNumbers(TreeNode* root) {
int sum=0;
int res=0;
solve(root,sum,res);
return res;
}
void solve(TreeNode* root, int sum,int& res){
if(!root){
return ;
}
sum=sum*10+root->val;
if(!root->left&&!root->right){
res+=sum;
return ;
}
solve(root->left,sum,res);
solve(root->right,sum,res);
}
};
代码二
牛课网也有类似的题目,我用python重新实现了一下,发现好久不练都不会了哈哈。
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
#
#
# @param root TreeNode类
# @return int整型
#
class Solution:
def dfs(self,root,val):
if(root is None):
return
cur=val*10+root.val
if(root.left is None and root.right is None):
self.nums.append(cur)
self.dfs(root.left,cur)
self.dfs(root.right,cur)
def sumNumbers(self , root ):
# write code here
self.nums=[]
self.dfs(root,0)
return sum(self.nums)