/**
* Definition for binary tree
* 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;
sumpath(root,0,sum);
return sum;
}
void sumpath(TreeNode *p, int presum, int& sum )
{
if(NULL==p) return;
presum=presum*10+p->val;
if(p->left==NULL && p->right==NULL)
{
sum+=presum;
}
sumpath(p->left,presum,sum);
sumpath(p->right,presum,sum);
}
};
树的递归两种策略:
1. 结果在root产生,可以遵循traversal order, 一般函数递归返回结果
2. 结果在leaf节点产生,并难以遵循traversal order, 并且产生结果需要父节点的数据,可以设置全局变量或者变量引用,在递归中变量得到更新,最终返回这个变量(如这题)