首页 > 其他分享 >Leetcode秋招冲刺(专题13--15)

Leetcode秋招冲刺(专题13--15)

时间:2024-07-03 16:55:41浏览次数:21  
标签:13 right TreeNode val -- int que 15 left

专题13:广度优先搜索

题目559:N叉树的最大深度(YES)

  • 解题思路:使用广度优先搜索,广度优先搜索的核心就是使用队列queue存储每个根节点,然后再存储孩子节点。

给定一个 N 叉树,找到其最大深度。

最大深度是指从根节点到最远叶子节点的最长路径上的节点总数。

N 叉树输入按层序遍历序列化表示,每组子节点由空值分隔(请参见示例)。

/*
// Definition for a Node.
class Node {
public:
    int val;
    vector<Node*> children;

    Node() {}

    Node(int _val) {
        val = _val;
    }

    Node(int _val, vector<Node*> _children) {
        val = _val;
        children = _children;
    }
};
*/

class Solution {
public:
    int maxDepth(Node* root) {
        if(root==NULL)
        {
            return 0;
        }
        //使用广度优先搜索,核心的点就是使用队列
        queue<Node*>que;
        que.push(root);
        int high=0;

        //不为空,就继续
        while(!que.empty())
        {
            int size =que.size();
            for(int i=0;i<size;i++)
            {
                Node*front=que.front();
                que.pop();//出队

                //添加孩子节点
                int children_size=front->children.size();
                for(int j=0;j<children_size;j++)
                {
                    que.push(front->children[j]);
                }
            }
            high++;
        }
        return high;
        
    }
};

题目617:合并二叉树(NO)

  • 解题思路:这题得用深度优先搜索,广度优先所搜过于繁琐。

给你两棵二叉树: root1 和 root2 。

想象一下,当你将其中一棵覆盖到另一棵之上时,两棵树上的一些节点将会重叠(而另一些不会)。你需要将这两棵树合并成一棵新二叉树。合并的规则是:如果两个节点重叠,那么将这两个节点的值相加作为合并后节点的新值;否则,不为 null 的节点将直接作为新二叉树的节点。

返回合并后的二叉树。

注意: 合并过程必须从两个树的根节点开始。

/**
 * 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:
    TreeNode* mergeTrees(TreeNode* t1, TreeNode* t2) {
        if (t1 == nullptr) {
            return t2;
        }
        if (t2 == nullptr) {
            return t1;
        }
        auto merged = new TreeNode(t1->val + t2->val);
        merged->left = mergeTrees(t1->left, t2->left);
        merged->right = mergeTrees(t1->right, t2->right);
        return merged;
    }
};

题目965:单值二叉树(YES)

  • 解题思路:使用二叉树的遍历算法进行判断就行,我这里用的是前序遍历,其实使用广度优先搜索也一样。

如果二叉树每个节点都具有相同的值,那么该二叉树就是单值二叉树。

只有给定的树是单值二叉树时,才返回 true;否则返回 false。

/**
 * 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:
    void preorder(TreeNode*root,int ans,bool &sign)
    {
        if(root==NULL)
        {
            return ;
        }
        if(root->val!=ans)
        {
            sign=false;
        }
        preorder(root->left,ans,sign);
        preorder(root->right,ans,sign);
    }
    bool isUnivalTree(TreeNode* root) {
        //使用二叉树的遍历算法即可,这里用二叉树的前序遍历
        int ans=root->val;
        bool sign=true;
        preorder(root,ans,sign);

        return sign;
    }
};

题目637:二叉树的层平均值(YES)

  • 解题思路:使用层序遍历也就是广度优先搜索即可

给定一个非空二叉树的根节点 root , 以数组的形式返回每一层节点的平均值。与实际答案相差 10-5 以内的答案可以被接受。

/**
 * 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:
    vector<double> averageOfLevels(TreeNode* root) {
        //使用层序遍历,也就是广度优先搜索就行
        queue<TreeNode*>que;
        que.push(root);
        vector<double>ans;
        while(!que.empty())
        {
            int size=que.size();
            double sum=0;
            for(int i=0;i<size;i++)
            {
                TreeNode*front=que.front();
                que.pop();
                sum+=front->val;

                //将孩子节点入队
                if(front->left!=NULL)
                {
                    que.push(front->left);
                }

                if(front->right!=NULL)
                {
                    que.push(front->right);
                }
            }
            ans.push_back(sum/size);
        }

        return ans;
    }
};

题目175:计算二叉树的深度(YES)

  • 解题思路:使用层序遍历

某公司架构以二叉树形式记录,请返回该公司的层级数。

  • myself
/**
 * 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 calculateDepth(TreeNode* root) {
        //使用层序遍历
        if(root==NULL)
        {
            return 0;
        }

        queue<TreeNode*>que;
        que.push(root);
        int ans=0;
        while(!que.empty())
        {
            int size=que.size();
            ans++;
            for(int i=0;i<size;i++)
            {
                TreeNode*front=que.front();
                que.pop();

                //将孩子节点入队
                if(front->left!=NULL)
                {
                    que.push(front->left);
                }
                if(front->right!=NULL)
                {
                    que.push(front->right);
                }
            }
        }

        return ans;
    }
};

标签:13,right,TreeNode,val,--,int,que,15,left
From: https://blog.csdn.net/qq_71286244/article/details/140151795

相关文章

  • 真太卷了...又开源一款开放API管理工具,支持扩展插件(带私活源码)
     关于API管理工具,相信大家已经都有自己用着顺手的。像国外的Postman,国内有Apifox等等。今天给大家分享的是近期在GitHub比较热门的另一款开放API管理工具:Eoapi。1.Eoapi简介概括来说:这是一款API管理工具,支持扩展插件,简单,开源。Eoapi集合了基础的API管理功能和测试......
  • Yolo
    ONNXformat是什么?ONNX(OpenNeuralNetworkExchange),中文名是开放神经网络交换格式,是一种针对机器学习所设计的开放式的文件格式,用于存储训练好的模型。它使得不同的人工智能框架(如PyTorch、MXNet)可以采用相同格式存储模型数据并交互。ONNX的规范及代码主要由微软、亚马逊、Face......
  • 三菱 FX3U系列PLC输出接线方法
    不管使用哪种型号的三菱PLC,都需要掌握其接线方式,明白三菱PLC所接电源是多少,知道怎么把信号接入到PLC里面,怎么用PLC的输出信号来控制负载,模拟量信号的输入和输出怎么接,等等我们都需要掌握,在了解接线方式前,我们需要先了解此三菱PLC的型号,清楚了型号后我们才能够更好的来接线。如......
  • charles使用
    一.charles简介Charles是一个HTTP代理服务器,HTTP监视器,当浏览器连接Charles的代理访问互联网时,Charles可以监控浏览器发送和接收的所有数据。它允许一个开发者查看所有连接互联网的HTTP通信,这些包括request,response和HTTPheaders(包含cookies与caching信息)二.charles下载安......
  • 模块一
    变量命名规范见名知义下划线命名法(推荐使用),驼峰命名法只能包含字母、数字和下划线,不能以数字开头不能使用保留字基本数据类型整型(integer)和浮点型(float)​ 不可变数据类型(immutable)字符串类型​ 通常使用一对单引号('')或双引号(""),三重引号('''或""")......
  • 代码随想录算法训练营第四十六天 | 买卖股票的最佳时机
    121.买卖股票的最佳时机题目链接文章讲解视频讲解动规五部曲:dp[j][0]:表示持有股票的最大现金,dp[j][1]表示不持有股票的最大现金递推公式:第j天持有股票的最大现金为:之前就持有这只股票和今天持有这只股票取最大值:dp[j][0]=max(dp[j-1][0],-prices[j]);第j天不持有......
  • Cosmopedia: 如何为预训练构建大规模合成数据集
    本文概述了我们在生成含数十亿词元的合成数据集以复现Phi-1.5过程中所遇到的挑战及其解决方案,由此最终创建了Cosmopedia合成数据集。合成数据已成为机器学习社区的C位话题,其题中之义是用人工(如使用大语言模型(LLM))生成的数据模拟真实数据。传统上,构建用于有监督微调和......
  • kafka消息积压处理办法
    首先分析一下它为什么会积压,无非是以下几种情况,写个思路代码中消费者处理消费效率低、kafka参数使用默认、消费者消费能力不足(生产者生产能力过盛)、网络带宽、服务器性能等1、代码质量问题(消费者处理逻辑复杂等)这个问题运维并不好直接验证,处理消费的速度慢,或者说处理的流程相对......
  • OpenAI 向少部分用户推出 GPT-4o(S2S)模型;Meta 发布 3D Gen AI 模型丨 RTE 开发者日报
      开发者朋友们大家好: 这里是「RTE开发者日报」,每天和大家一起看新闻、聊八卦。我们的社区编辑团队会整理分享RTE(Real-TimeEngagement)领域内「有话题的新闻」、「有态度的观点」、「有意思的数据」、「有思考的文章」、「有看点的会议」,但内容仅代表编辑的个人观点,......
  • CF 1981 D. World is Mine (*1800) DP+博弈论
    CF1981D.WorldisMine(*1800)DP+博弈论题目链接题意:有\(n\)个蛋糕,每个蛋糕有一个美味值\(a_i\),\(Alice\)和\(Bob\)轮流吃蛋糕,\(Alice\)每次必须选择吃严格大于之前所吃的蛋糕美味程度。\(Bob\)随意选择。有人没有蛋糕可以吃时,游戏结束。\(Alice\)想吃更多......