1、题目描述
2、分析
这道题和124题有点像,只不过124更难一点,这道题只需要将所有到叶子节点的值计算出来再计算和。需要注意的是,必须是叶子节点,也就是说递归结束的条件是当前节点的左子树右子树都为空时才结束。之后递归分别计算左子树和右子树即可。
3、代码
/**
* 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) {
if(root==NULL) return 0;
return DFS(root,0);
}
int DFS(TreeNode* root,int cursum){
int leftsum=0,rightsum=0;
if(root->left==NULL&&root->right==NULL){
return cursum+root->val;
}
if(root->left!=NULL){
leftsum=DFS(root->left,10*(cursum+root->val));
}
if(root->right!=NULL){
rightsum=DFS(root->right,10*(cursum+root->val));
}
return leftsum+rightsum;
}
};
4、相关知识点
树的DFS搜索其实结束条件都比较简单,无非是节点为空或者左右子树都为空。树相关的DFS一般都会有返回值。