这道题和124题有点像,只不过124更难一点,这道题只须要将全部到叶子节点的值计算出来再计算和。须要注意的是,必须是叶子节点,也就是说递归结束的条件是当前节点的左子树右子树都为空时才结束。以后递归分别计算左子树和右子树便可。node
/** * 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; } };
树的DFS搜索其实结束条件都比较简单,无非是节点为空或者左右子树都为空。树相关的DFS通常都会有返回值。code