【每日算法】LeetCode 129 —— 求根到叶子节点数字之和(二百一十九)

题目内容

给你一个二叉树的根节点 root ,树中每个节点都存放有一个 0 到 9 之间的数字。
每条从根节点到叶节点的路径都代表一个数字:

例如,从根节点到叶节点的路径 1 -> 2 -> 3 表示数字 123 。
计算从根节点到叶节点生成的 所有数字之和 。

叶节点 是指没有子节点的节点。

示例

示例 1:

输入:root = [1,2,3]
输出:25
解释:
从根到叶子节点路径 1->2 代表数字 12
从根到叶子节点路径 1->3 代表数字 13
因此,数字总和 = 12 + 13 = 25

示例 2:

输入:root = [4,9,0,5,1]
输出:1026
解释:
从根到叶子节点路径 4->9->5 代表数字 495
从根到叶子节点路径 4->9->1 代表数字 491
从根到叶子节点路径 4->0 代表数字 40
因此,数字总和 = 495 + 491 + 40 = 1026

提示

1、树中节点的数目在范围 [1, 1000] 内
2、0 <= Node.val <= 9
3、树的深度不超过 10

题解

本题考查树的遍历,这里采用深度优先搜索算法会更合适。具体操作就是从根节点递归遍历整棵树,遍历时要维护根节点到到当前节点表示的数,然后当遍历到叶子节点时,将该数存入答案内。

代码

/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode() : val(0), left(nullptr), right(nullptr) {}
* TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
* TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
* };
*/
class Solution {
public:
int ans = 0;
int sumNumbers(TreeNode* root) {
if(root) dfs(root,0);
return ans;
}

void dfs(TreeNode* root,int number){
number = number * 10 + root->val;
if(!root->right && !root->left) ans += number;
if(root->left) dfs(root->left, number);
if(root->right) dfs(root->right,number);
}
};
Author: Frederic Niu
Link: https://www.fredericniu.cn/2021/08/21/【每日算法】LeetCode-129-——-求根到叶子节点数字之和(二百一十九)/
Copyright Notice: All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.
我的公众号