考察的知识点:二叉树的层次遍历、深度优先搜索;
解答方法分析:
- 定义了一个树节点结构
TreeNode
,其包含一个整数值val
和左右子节点的指针。 sumNumbers
函数接收一个二叉树的根节点,并用dfs
函数进行处理。它返回了将根节点到叶子节点路径上的值之和。dfs
函数定义了两个参数,root
表示当前所在的节点,pre
表示当前路径上的数值和。首先判断当前节点是否为空,若为空则返回0。- 对于非空节点,根据题目要求计算当前路径上的数值和
sum
即将上一个节点路径数值和乘以10加上当前节点的值。 - 然后判断当前节点是否为叶子节点,如果是叶子节点则直接返回
sum
。 - 如果不是叶子节点,继续递归调用
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); } } };