思路:用一個字符串記錄節點的值,每次將節點的值添加到字符串的最後,當訪問到葉子節點時,將路徑和計入sum.
回溯時,彈出最後的一個字符值即可。
/**
* 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 {
void search(TreeNode* root, string str, int& sum) {
if (root == NULL)
return;
//記錄非空節點的值
str.append(1, '0' + root->val);
if (root->left == NULL && root->right == NULL) {//葉子節點
sum += atoi(str.c_str());
str.erase(str.size()-1, 1);//回溯
return;
}
search(root->left, str, sum);
search(root->right, str, sum);
return;
}
public:
int sumNumbers(TreeNode* root) {
if(root==NULL)
return 0;
int sum=0;
search(root,"",sum);
return sum;
}
};