
【BFS】——LeetCode - 112. 路径总和
初始化队列,将根节点加入队列,并记录初始路径和。 在循环处理中,取出队列中的当前节点,检查其是否是叶子节点。如果是,检查路径和是否等于目标和。 如果不是叶子节点,继续处理左孩子和右孩子,将它们加入队列,并更新路径和。 在处理过程中,提前终止:如果当前路径和已经超过目标和,跳过处理左孩子和右孩子。 初始化队列:使用两个队列 处理节点:循环处理队列中的节点,取出当前节点并检查路径和。 叶子节点检查:如果当前节点是叶子节点,检查路径和是否等于目标和。 处理子节点:将左孩子和右孩子加入队列,并更新路径和。 提前终止:如果路径和超过目标和,跳过处理子节点。
发布日期:2021-05-07 21:20:21
浏览次数:30
分类:精选文章
本文共 1633 字,大约阅读时间需要 5 分钟。
为了解决问题,我们可以采用广度优先搜索(BFS)的方法来判断是否存在一条从根节点到叶子节点的路径,使得路径上的节点值之和等于目标和targetSum。
解题思路
我们使用两个队列来实现BFS:一个队列存储需要遍历的节点,另一个队列存储到达这些节点时的路径和。这样可以确保每个节点只被处理一次,避免重复计算。
具体步骤如下:
这种方法的时间复杂度为O(n),其中n是二叉树的节点数。每个节点只会被访问一次。
代码实现
import java.util.*;class Solution { public boolean hasPathSum(TreeNode root, int targetSum) { if (root == null) { return false; } Queuequeue = new LinkedList<>(); Queue pathSum = new LinkedList<>(); queue.offer(root); pathSum.offer(root.val); while (!queue.isEmpty()) { TreeNode current = queue.poll(); int temp = pathSum.poll(); if (temp > targetSum) { continue; } if (current.left == null && current.right == null) { if (temp == targetSum) { return true; } continue; } if (current.left != null) { queue.offer(current.left); pathSum.offer(temp + current.left.val); } if (current.right != null) { queue.offer(current.right); pathSum.offer(temp + current.right.val); } } return false; }}
代码解释
queue
和pathSum
分别存储节点和路径和。这种方法确保了每个节点只被处理一次,并且在路径和超过目标和时提前终止,提高了算法的效率。
发表评论
最新留言
逛到本站,mark一下
[***.202.152.39]2025年04月12日 17时47分03秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
webpack实践(一)- 先入个门
2019-03-05
webpack实践(三)- html-webpack-plugin
2019-03-05
OpenJDK1.8.0 源码解析————HashMap的实现(一)
2019-03-05
MySQL-时区导致的时间前后端不一致
2019-03-05
2021-04-05阅读小笔记:局部性原理
2019-03-05
将Java编译为本地代码
2019-03-05
go语言简单介绍,增强了解
2019-03-05
2.1 Kubernetes--Pod
2019-03-05
python file文件操作--内置对象open
2019-03-05
【工程应用三】三种不同的文本图像背景漂白/纯化/去除算法。
2019-03-05
ERP/MIS开发 LLBL Gen多表操作
2019-03-05
Remove function
2019-03-05
在没实践机会的前提下,如何跨越级别
2019-03-05
从面试官角度告诉大家如何准备项目方面的描述
2019-03-05
去创业公司不能有一夜暴富的侥幸,更不能指望掉馅饼
2019-03-05
架构师入门:搭建基本的Eureka架构(从项目里抽取)
2019-03-05
Java核心技术及面试指南 流程控制方面的面试题答案
2019-03-05
程序员如何在百忙中更有效地利用时间,如何不走岔路,不白忙(忙得要有效率,要有收获)
2019-03-05