129. Sum Root to Leaf Numbers
- Total Accepted: 91108
- Total Submissions: 264689
- Difficulty: Medium
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.
For example,
1 / \ 2 3
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
.
解题思路:
本题要找出所有从根节点的叶节点的各数字组成的数的和。与前面找出所有从根节点到叶节点的路径题目相似。此处考虑使用一个向量记录所有的root to leaf numbers。
代码展示:
/**
* 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:
vector<int> res;
void getnum(TreeNode* root,int num) //num第一次调用时为根节点的值
{
if(root==NULL) return;
//num 即记录从根结点到此节点的和,如果该节点为叶节点,则保存在向量中
if(root&&root->left==NULL&&root->right==NULL) res.push_back(num);
//左子树非空,则左子结点的和 为父节点的值*10+左子结点的值
if(root->left) getnum(root->left,num*10+root->left->val);
if(root->right) getnum(root->right,num*10+root->right->val);
}
int sumNumbers(TreeNode* root) {
int ans=0;
if(root==NULL) return 0;
getnum(root,root->val);
int n = res.size();
for(int i=0;i<n;i++)
{
//cout<<res[i]<<endl;
ans+=res[i];
}
return ans;
}
};