Leetcode—— 求根节点到叶节点数字之和
Posted Yawn,
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Leetcode—— 求根节点到叶节点数字之和相关的知识,希望对你有一定的参考价值。
1. 求根节点到叶节点数字之和
(1)DFS
- 特例处理:root为空返回0
- 递归从根节点开始,递归时包含两个参数,一个是当前节点node,一个是到当前节点为止的数字和num
- 如果node的左节点存在,进入左节点的递归;如果node的右节点存在,进入右节点的递归
- 如果node的左节点和右节点都不存在,也就是当前节点是叶子节点,把num加到结果中
- 返回res
class Solution {
int res;
public int sumNumbers(TreeNode root) {
if (root == null) {
return 0;
}
dfs(root, root.val);
return res;
}
public void dfs(TreeNode node, int num){
if (node.left == null && node.right == null) {
res += num;
return;
}
if (node.left != null) {
dfs(node.left, num * 10 + node.left.val);
}
if (node.right != null) {
dfs(node.right, num * 10 + node.right.val);
}
}
}
(2)BFS
- 特例处理:若root为空返回0
- 用队列存储节点node和当前节点对应的数字和num
- 只要队列非空进入循环:
i. 队列元素出队,记录node和num
ii. 如果当前节点是叶子节点,res += num
iii. 如果当前节点的左子节点存在,该子节点和加上该子节点值的数字和入队
iv. 如果当前节点的右子节点存在,该子节点和加上该子节点值的数字和入队 - 返回res
class Solution {
public int sumNumbers(TreeNode root) {
if (root == null) {
return 0;
}
Queue<TreeNode> queueNode = new LinkedList<>();
Queue<Integer> queueNum = new LinkedList<>();
queueNode.offer(root);
queueNum.offer(root.val);
int res = 0;
while (!queueNode.isEmpty()) {
TreeNode node = queueNode.poll();
int num = queueNum.poll();
if (node.left == null && node.right == null) {
res += num;
}
if (node.left != null){
queueNode.offer(node.left);
queueNum.offer(num * 10 + node.left.val);
}
if (node.right != null) {
queueNode.offer(node.right);
queueNum.offer(num * 10 + node.right.val);
}
}
return res;
}
}
以上是关于Leetcode—— 求根节点到叶节点数字之和的主要内容,如果未能解决你的问题,请参考以下文章
LeetCode第129题—求根节点到叶节点数字之和—Python实现
LeetCode Algorithm 129. 求根节点到叶节点数字之和