原题:
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.
The root-to-leaf path 1->2
represents the number 12
.
The root-to-leaf path 1->3
represents the number 13
.
Return the sum = 12 + 13 = 25
.
解题思路:
在每个节点将父节点传下来的的值乘以10加上自己的val,可以获得一个值,然后把这个值传到左右子节点上,最后如果处理到叶子节点的时候,可以得到一条路径的值,然后把所有的路径的和都加在一个int里就可以,要加在一个int,就需要在传参的时候传地址。如图:
代码如下( 20 ms):
class Solution {
public:
int sumNumbers(TreeNode *root) {
// IMPORTANT: Please reset any member data you declared, as
// the same Solution instance will be reused for each test case.
if(root==NULL) return 0;
int result = 0;
DFS(root , 0 , result);
return result;
}
void DFS(TreeNode *root , int num , int &result ){
//由于需要保存层的信息,声明一个vector保存两个int
//第一个为level信息,叶子为1层,别的都保存10^层数,第二层保存10,第三层保存100
int level = num*10+root->val;
if(root->left==NULL && root->right==NULL){
//叶子节点
result+=level;
return;
}
if(root->left){
DFS(root->left , level , result);
}
if(root->right){
DFS(root->right , level , result);
}
}
};