毋庸置疑,用先序遍历。
但是实现起来却有点问题。
刚开始我用一个string类型变量保存路径上所有数字,用一个int &sum保存结果,但是只通过了95%。
后面发现其实可以直接通过一个数字传递路径上数字和,遇到叶节点返回左右子树相加的结果即可。
class Solution {
public:
/**
*
* @param root TreeNode类
* @return int整型
*/
int sumNumbers(TreeNode* root) {
// write code here
if(!root) return 0;
int sum = 0;
return preOrder(root, sum);
}
int preOrder(TreeNode *root, int sum) {
if (!root) return 0;
sum = 10 * sum + root->val;
if (!root->left && !root->right) return sum;
return preOrder(root->left, sum) + preOrder(root->right, sum);
}
};
京公网安备 11010502036488号