LeetCode刷题---路径总和

62 篇文章 1 订阅
15 篇文章 0 订阅

在这里插入图片描述
在这里插入图片描述

广度优先搜索:

广度优先搜索(Breadth-First Search,简称BFS)是一种用于遍历或搜索树或图的算法。这个算法从根节点(或任意一个节点)开始,并探索最靠近根节点的邻居节点。如果所有邻居节点都已被访问过,搜索则回溯到发现邻居节点的节点。这一过程一直进行到已发现从源节点可达的所有节点为止。如果还存在未被发现的节点,则选择其中一个作为源节点并重复以上过程,整个进程反复进行直到所有节点都被访问为止。

广度优先搜索的实现通常依赖于队列数据结构。 在搜索开始时,首先将根节点放入队列中。然后,在每一步中,算法都会检查队列中的第一个节点,并访问其所有尚未访问过的邻居节点。这些邻居节点随后被添加到队列的末尾。然后,算法从队列中删除当前节点,并继续处理队列中的下一个节点。

官方题解

LeetCode官方题解

解题思想

使用队列辅助完成BFS(广度优先搜索算法)
创建树节点队列queue和整数队列qval用于存储节点和节点中的值
首先将根节点和其值加入队列中
当queue不为空的时候,根据队列先进先出的特点,从队列中poll()取出节点
对当前节点判断,如果当前节点是叶子节点,且其值和从根节点开始的路径上的所有值累加起来等于target目标值,则返回true,否则退出当前循环
如果当前节点不为叶子节点,则先判断其左节点是否为空,如果不为空,则将左节点放入队列中并将其值和当前路径上的值累加起来,同理,再判断当前节点的右节点。

代码实现:

/**
 * 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 boolean hasPathSum(TreeNode root, int targetSum) {
        if(root==null)
        {
            return false;
        }

        //使用队列来辅助完成DFS(广度优先搜索)
        Queue<TreeNode> queue=new LinkedList<TreeNode>();
        Queue<Integer> qval=new LinkedList<Integer>();

        queue.offer(root);
        qval.offer(root.val);
        while(!queue.isEmpty())
        {
            TreeNode now=queue.poll();
            int temp=qval.poll();
            if (now.left == null && now.right == null) {
                if (temp == targetSum) {
                    return true;
                }
                continue;
            }

            if(now.left!=null)
            {
                queue.offer(now.left);
                qval.offer(now.left.val+temp);
            }

            if(now.right!=null)
            {
                queue.offer(now.right);
                qval.offer(now.right.val+temp);
            }

        }

        return false;
    }
}
  • 9
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值