這道題和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