题目链接
题目描述
给你一个二叉树的根节点 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, 1000]
内 0 <= Node.val <= 9
-
解题思路
方法一:dfs
这不有手就能写?
/**
* 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 sumNumbers(TreeNode* root) {
dfs(root,0);
return ans;
}
void dfs(TreeNode* root,int sum){
if(root==nullptr)
return;
sum = sum*10 + root->val;
if(root->left==nullptr&&root->right==nullptr){
ans += sum;
}
dfs(root->left,sum);
dfs(root->right,sum);
}
private:
int ans = 0;
};
时间复杂度 O(n)
-
方法二:bfs 需要队列,不推荐,但是要求非递归的话,可以的
利用队列层次遍历二叉树。
不断向下更新每一层的val,为当前层 val * 10 +下一层val
当当前结点左右子节点为空时,加到结果中/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode() {} * TreeNode(int val) { this.val = val; } * TreeNode(int val, TreeNode left, TreeNode right) { * this.val = val; * this.left = left; * this.right = right; * } * } */ class Solution { public int sumNumbers(TreeNode root) { int res = 0; Deque<TreeNode> dq = new LinkedList<TreeNode>(); dq.offerLast(root); while(!dq.isEmpty()){ int k = dq.size(); while(k > 0){ --k; TreeNode node = dq.pollFirst(); if(node.left == null && node.right == null){ res += node.val; }else{ if(node.left != null){ node.left.val = node.val*10 + node.left.val; dq.offerLast(node.left); } if(node.right != null){ node.right.val = node.val*10 + node.right.val; dq.offerLast(node.right); } } } } return res; } }
时间复杂度 O(n)
- 空间复杂度 O(n)