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