【刷爆LeetCode】五月算法集训(17)广度优先搜索

本文介绍了四个算法题目,包括LCP44开幕式焰火(使用哈希表和队列实现)、102二叉树的层序遍历、1609奇偶树及1263推箱子。通过C++代码展示了广度优先搜索在解决树形问题中的应用,适合提升算法能力。
摘要由CSDN通过智能技术生成

题目来源于知识星球—英雄算法联盟,五月算法集训专题

前言

跟随英雄算法联盟博主—英雄哪里出来,每天完成相应的算法练习,一个月后,必定会有所成长!


一、LCP 44.开幕式焰火(简单)

1.题目描述

https://img-blog.csdnimg.cn/9228089a7fce408c9bef9d20774f271b.jpeg =500x

2.解题思路

用到了哈希表和队列。将根节点放入队列,利用广度优先搜索,将每个扩展出来
的节点放入哈希表,放入之前统计是否出现过并计数。

3.代码演示(C++)

class Solution 
{
public:
    int numColor(TreeNode* root) 
    {
        int hash[1001],cnt=0;
        queue<TreeNode*>q;
        memset(hash,0,sizeof(hash));
        q.push(root);
        while(!q.empty())
        {
            TreeNode *now=q.front();
            q.pop();
            if(now)
            {
                if(!hash[now->val])
                {
                    hash[now->val]=1;
                    ++cnt;
                }
                q.push(now->left);
                q.push(now->right);
            }
        }
        return cnt;
    }
};

4.题目链接

题目传送门


二、102.二叉树的层序遍历(中等)

1.题目描述

https://img-blog.csdnimg.cn/2d4646142b14485bbfd589dec0946081.jpeg =500x

2.解题思路

将根节点放入队列,入队时记录深度,出队时,根据深度来选择放入结果
数组的哪一层,之后套用广度优先搜索的模板。

3.代码演示(C++)

class Solution 
{
public:
    vector<vector<int>> levelOrder(TreeNode* root) 
    {
        if(root==nullptr)
        {
            return {};
        }
        vector<vector<int>>ret;
        unordered_map<TreeNode*,int>dep;
        queue<TreeNode*>q;
        dep[root]=0;
        int predep=-1;
        q.push(root);
        while(!q.empty())
        {
            TreeNode* n=q.front();
            q.pop();
            if(dep[n]!=predep)
            {
                ret.push_back({n->val});
                predep=dep[n];
            }
            else 
            {
                ret.back().push_back(n->val);
            }
            if(n->left)
            {
            dep[n->left]=dep[n]+1;
            q.push(n->left);
            }
            if(n->right)
            {
            dep[n->right]=dep[n]+1;
            q.push(n->right);
            }
        } 
        return ret;
    }
    
};

4.题目链接

题目传送门


三、1609.奇偶树(中等)

1.题目描述

https://img-blog.csdnimg.cn/43544a780b9f4ca1b4642362deeb23da.jpeg =500x

2.解题思路

不会做,下次一定!

3.代码演示(C++)


4.题目链接

题目传送门


四、1263.推箱子(困难)

1.题目描述

https://img-blog.csdnimg.cn/173198a222ce48e0aa327999697ed022.jpeg =500x

2.解题思路

困难题我直接放弃好吧?

3.代码演示(C++)


4.题目链接

题目传送门


总结

每天跟随英雄哥学习相关的算法,一个月会收获很多,如果你想了解更多关于知识星球的内容,欢迎联系我!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值