毋庸置疑,用先序遍历。
但是实现起来却有点问题。
刚开始我用一个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); } };