Sum Root to Leaf Numbers
方法:使用递归的思想
/** * 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 == nullptr) return 0; sum = 0; sumNumbers(root, root->left, root->right); return sum; } void sumNumbers(TreeNode *root, TreeNode *lt, TreeNode *rt) { if(lt == nullptr && rt == nullptr) { sum += root->val; return; } if(lt == nullptr) { rt->val += root->val * 10; sumNumbers(rt, rt->left, rt->right); } else if(rt == nullptr) { lt->val += root->val * 10; sumNumbers(lt, lt->left, lt->right); } else { lt->val += root->val * 10; rt->val += root->val * 10; sumNumbers(rt, rt->left, rt->right); sumNumbers(lt, lt->left, lt->right); } } private: int 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 { public: int sumNumbers(TreeNode* root) { return sumNumbers(root, 0); } int sumNumbers(TreeNode *root, int sum) { if(root == nullptr) return 0; if(root->left == nullptr && root->right == nullptr) return (10 * sum + root->val); return sumNumbers(root->left, 10 * sum + root->val) + sumNumbers(root->right, 10 * sum + root->val); } };

浙公网安备 33010602011771号