考察的知识点:二叉树的层次遍历、深度优先搜索;

解答方法分析:

  1. 定义了一个树节点结构 TreeNode,其包含一个整数值 val 和左右子节点的指针。
  2. sumNumbers 函数接收一个二叉树的根节点,并用 dfs 函数进行处理。它返回了将根节点到叶子节点路径上的值之和。
  3. dfs 函数定义了两个参数,root表示当前所在的节点,pre表示当前路径上的数值和。首先判断当前节点是否为空,若为空则返回0。
  4. 对于非空节点,根据题目要求计算当前路径上的数值和 sum即将上一个节点路径数值和乘以10加上当前节点的值。
  5. 然后判断当前节点是否为叶子节点,如果是叶子节点则直接返回 sum
  6. 如果不是叶子节点,继续递归调用 dfs 函数,分别处理当前节点的左子树和右子树,并将左右树结果的和返回。

所用编程语言:C++;

完整编程代码:↓

/**
 * struct TreeNode {
 *  int val;
 *  struct TreeNode *left;
 *  struct TreeNode *right;
 *  TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
 * };
 */
class Solution {
  public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     *
     * @param root TreeNode类
     * @return int整型
     */
    int sumNumbers(TreeNode* root) {
        return dfs(root, 0);
    }

    int dfs(TreeNode* root, int pre) {
        if (root == nullptr) {
            return 0;
        }
        int sum = pre * 10 + root->val;
        if (root->left == nullptr && root->right == nullptr) {
            return sum;
        } else {
            return dfs(root->left, sum) + dfs(root->right, sum);
        }
    }
};