【每日刷题】Day49

【每日刷题】Day49

🥕个人主页:开敲🍉

🔥所属专栏:每日刷题🍍

🌼文章目录🌼

1. 110. 平衡二叉树 - 力扣(LeetCode)

2. 501. 二叉搜索树中的众数 - 力扣(LeetCode)

3. 637. 二叉树的层平均值 - 力扣(LeetCode)

1. 110. 平衡二叉树 - 力扣(LeetCode)

//思路:平衡二叉树:对于树中每个结点都满足 左、右子树深度差值不超过1。因此我们递归遍历树的每一个结点,判断每一个结点处是否满足平衡二叉树,只要有一个不满足直接return false。

int TreeHigh(struct TreeNode* root)

{

    if(root==NULL)

        return 0;

    int HighLeft = TreeHigh(root->left);

    int HighRight = TreeHigh(root->right);

    return 1+(HighLeft>HighRight?HighLeft:HighRight);

}

bool isBalanced(struct TreeNode* root)

{

    if(root==NULL)

        return true;

    int HighLeft = TreeHigh(root->left);

    int HighRight = TreeHigh(root->right);

    int tmp = abs(HighLeft-HighRight);

    if(tmp>1)

        return false;

    return isBalanced(root->left)&&isBalanced(root->right);

}

2. 501. 二叉搜索树中的众数 - 力扣(LeetCode)

//思路:哈希表。本题很容易想到使用哈希表存储每个数出现的次数,找出出现次数最多的数。但因为数中的值可能为负数,因此我们需要对哈希表的键进行调整。

void FindMode(struct TreeNode* root,int* arr)

{

    if(root==NULL)

        return;

    arr[root->val+100000]+=1;//将所有负数转变为正数

    FindMode(root->left,arr);

    FindMode(root->right,arr);

}

int* findMode(struct TreeNode* root, int* returnSize)

{

    int hash[200001] = {0};

    FindMode(root,hash);

    int max = 0;

    int* ans = (int*)malloc(sizeof(int)*10000);

    int size = 0;

    for(int i = 0;i<200001;i++)

    {

        max = max>hash[i]?max:hash[i];

    }

    for(int i = 0;i<200001;i++)

    {

        if(hash[i]==max)

        {

            ans[size++] = i-100000;//将原为负数的值更改回去

        }

    }

    *returnSize = size;

    return ans;

}

3. 637. 二叉树的层平均值 - 力扣(LeetCode)

//思路:使用一个数组存储二叉树每一层结点个数,随后对二叉树进行层序遍历,每次根据每层结点个数将结点的值进行累加,然后除去当前层的结点个数,从而算出每层的平均值,存储进答案数组中返回。注:本题思路需要先明白二叉树层序遍历的实现。

typedef struct TreeNode BT;

typedef struct TreeNode* QDataType;


 

//队列节点

typedef struct listnode

{

    QDataType val;

    struct listnode* next;

}LN;

//队列头尾指针

typedef struct Queque

{

    LN* phead;

    LN* ptail;

    int size;

}QE;


 

//队列初始化

void QueInit(QE* qe)

{

    assert(qe);

    qe->phead = NULL;

    qe->ptail = NULL;

    qe->size = 0;

}


 

//入列

void QuePush(QE* qe, QDataType x)

{

    assert(qe);

    LN* newnode = (LN*)malloc(sizeof(LN));

    if (newnode == NULL)

    {

        perror("malloc:");

        exit(-1);

    }

    newnode->next = NULL;

    newnode->val = x;

    if (qe->phead == NULL)

    {

        qe->phead = qe->ptail = newnode;

    }

    else

    {

        qe->ptail->next = newnode;

        qe->ptail = qe->ptail->next;

    }

    qe->size++;

}


 

//出列

void QuePop(QE* qe)

{

    assert(qe);

    assert(qe->phead != NULL);

    assert(qe->size > 0);

    LN* tmp = qe->phead->next;

    free(qe->phead);

    qe->phead = tmp;

    qe->size--;

}


 

//获取列头元素

QDataType QueGetHead(QE* qe)

{

    assert(qe);

    assert(qe->phead != NULL);

    return qe->phead->val;

}


 

//判断队列是否为空

bool QueEmpty(QE* qe)

{

    assert(qe);

    return qe->size == 0;

}


 

//层序遍历二叉树计算平均值(队列实现层序遍历)

void SequenceTraverse(BT* root,int* arr,int size,double* ans,int* count)

{

    QE q;

    QueInit(&q);

    if (root)

        QuePush(&q, root);

    int i = 0;

    while (i<size)

    {

        double tmp = 0;

        int n = arr[i];//记录当前层的节点数

        while(n)

        {

            QDataType front = QueGetHead(&q);//获取队头元素

            QuePop(&q);//将队头元素出列

            if(front)

                tmp+=front->val;//累加

            if(front)

            {

                QuePush(&q, front->left);//继续将当前结点的left和right结点入队列

                QuePush(&q, front->right);

                n--;

            }

        }

        tmp/=arr[i];//计算平均值

        ans[(*count)++] = tmp;

        i++;

    }

}

//求二叉树第K层结点个数

int BinaryTreeKSize(BT* root,int k)

{

    if (root == NULL)

        return 0;

    if (k == 0)

        return 1;

    return BinaryTreeKSize(root->left, k - 1) + BinaryTreeKSize(root->right, k - 1);

}

double* averageOfLevels(struct TreeNode* root, int* returnSize)

{

    int ksize[10000] = {0};

    int size = 0;

    do

    {

        int ret = BinaryTreeKSize(root,size);

        ksize[size++] = ret;

    }while(ksize[size-1]);//将二叉树每层节点数存储起来

    double* ans = (double*)malloc(sizeof(double)*10000);

    int count = 0;

    SequenceTraverse(root,ksize,size,ans,&count);

    *returnSize = count-1;

    return ans;

}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/646699.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

JavaSE 学习记录

1. Java 内存 2. this VS super this和super是两个关键字&#xff0c;用于引用当前对象和其父类对象 this 关键字&#xff1a; this 关键字用于引用当前对象&#xff0c;即调用该关键字的方法所属的对象。 主要用途包括&#xff1a; 在类的实例方法中&#xff0c;通过 this …

H3CNE-7-TCP和UDP协议

TCP和UDP协议 TCP&#xff1a;可靠传输&#xff0c;面向连接 -------- 速度慢&#xff0c;准确性高 UDP&#xff1a;不可靠传输&#xff0c;非面向连接 -------- 速度快&#xff0c;但准确性差 面向连接&#xff1a;如果某应用层协议的四层使用TCP端口&#xff0c;那么正式的…

DragonKnight CTF2024部分wp

DragonKnight CTF2024部分wp 最终成果 又是被带飞的一天&#xff0c;偷偷拷打一下队里的pwn手&#xff0c;只出了一题 这里是我们队的wp web web就出了两个ez题&#xff0c;确实很easy&#xff0c;只是需要一点脑洞(感觉)&#xff0c; ezsgin dirsearch扫一下就发现有ind…

让大模型变得更聪明三个方向

让大模型变得更聪明三个方向 随着人工智能技术的飞速发展&#xff0c;大模型在多个领域展现出了前所未有的能力&#xff0c;但它们仍然面临着理解力、泛化能力和适应性等方面的挑战。那么&#xff0c;如何让大模型变得更聪明呢&#xff1f; 方向一&#xff1a;算法创新 1.1算…

【ML Olympiad】预测地震破坏——根据建筑物位置和施工情况预测地震对建筑物造成的破坏程度

文章目录 Overview 概述Goal 目标Evaluation 评估标准 Dataset Description 数据集说明Dataset Source 数据集来源Dataset Fields 数据集字段 Data Analysis and Visualization 数据分析与可视化Correlation 相关性Hierarchial Clustering 分层聚类Adversarial Validation 对抗…

linux系统部署Oracle11g:netca成功启动后1521端口未能启动问题

一、问题描述 执行netca命令&#xff0c;进入图形化界面&#xff0c;进行Oracle端口监听设置 #终端输入命令 netca 最终提示设置成功&#xff1a; 但是我们进行下一步“创建数据库”的时候会报错&#xff0c;说数据库端口1521未开启&#xff01; 二、问题处理 使用命令查看开…

【Python特征工程系列】一文教你使用PCA进行特征分析与降维(案例+源码)

这是我的第287篇原创文章。 一、引言 主成分分析&#xff08;Principal Component Analysis, PCA&#xff09;是一种常用的降维技术&#xff0c;它通过线性变换将原始特征转换为一组线性不相关的新特征&#xff0c;称为主成分&#xff0c;以便更好地表达数据的方差。 在特征重要…

【kubernetes】陈述式资源管理的kubectl命令合集

目录 前言 一、K8s 资源管理操作方式 1、声明式资源管理方式 2、陈述式资源管理方式 二、陈述式资源管理方式 1、kubectl 命令基本语法 2、查看基本信息 2.1 查看版本信息 2.2 查看资源对象简写 2.3 配置kubectl命令自动补全 2.4 查看node节点日志 2.5 查看集群信息…

Windows下安装配置深度学习环境

Windows下安装配置深度学习环境 1. 准备工作 1.1 环境准备 操作系统&#xff1a;win10 22H2 GPU&#xff1a;Nvidia GeForce RTX 3060 12G 1.2 安装Nvidia驱动、cuda、cuDNN 下载驱动需要注册并登录英伟达账号。我这里将下面用到的安装包放到了百度网盘&#xff0c;可以关注微信…

【Linux杂货铺】进程通信

目录 &#x1f308; 前言&#x1f308; &#x1f4c1; 通信概念 &#x1f4c1; 通信发展阶段 &#x1f4c1; 通信方式 &#x1f4c1; 管道&#xff08;匿名管道&#xff09; &#x1f4c2; 接口 ​编辑&#x1f4c2; 使用fork来共享通道 &#x1f4c2; 管道读写规则 &…

智能家居完结 -- 整体设计

系统框图 前情提要: 智能家居1 -- 实现语音模块-CSDN博客 智能家居2 -- 实现网络控制模块-CSDN博客 智能家居3 - 实现烟雾报警模块-CSDN博客 智能家居4 -- 添加接收消息的初步处理-CSDN博客 智能家居5 - 实现处理线程-CSDN博客 智能家居6 -- 配置 ini文件优化设备添加-CS…

fastadmin 树状菜单展开,合并;简要文件管理系统界面设计与实现

一&#xff0c;菜单合并效果图 源文件参考&#xff1a;fastadmin 子级菜单展开合并、分类父级归纳 - FastAdmin问答社区 php服务端&#xff1a; public function _initialize() {parent::_initialize();$this->model new \app\admin\model\auth\Filetype;$this->admin…

粤嵌—2024/5/21—打家劫舍(✔)

代码实现&#xff1a; int rob(int *nums, int numsSize) {if (numsSize 1) {return nums[0];}if (numsSize 2) {return fmax(nums[0], nums[1]);}int dp[numsSize];dp[0] nums[0];dp[1] fmax(nums[0], nums[1]);for (int i 2; i < numsSize; i) {dp[i] fmax(dp[i - 1…

东方通TongWeb结合Spring-Boot使用

一、概述 信创需要; 原状:原来的服务使用springboot框架,自带的web容器是tomcat,打成jar包启动; 需求:使用东方通tongweb来替换tomcat容器; 二、替换步骤 2.1 准备 获取到TongWeb7.0.E.6_P7嵌入版 这个文件,文件内容有相关对应的依赖包,可以根据需要来安装到本地…

vue/core源码中ref源码的js化

起源&#xff1a; 当看见reactivity文件中的ref.ts文件长达五百多的ts代码后&#xff0c;突发奇想想看下转化成js有多少行。 进行转化&#xff1a; let shouldTrack true; // Define shouldTrack variable let activeEffect null; // Define activeEffect variable// 定义…

Android9.0 MTK平台如何增加一个系统应用

在安卓定制化开发过程中&#xff0c;难免遇到要把自己的app预置到系统中&#xff0c;作为系统应用使用&#xff0c;其实方法有很多&#xff0c;过程很简单&#xff0c;今天分享一下我是怎么做的&#xff0c;共总分两步&#xff1a; 第一步&#xff1a;要找到当前系统应用apk存…

【数据结构与算法 经典例题】判断链表是否带环

&#x1f493; 博客主页&#xff1a;倔强的石头的CSDN主页 &#x1f4dd;Gitee主页&#xff1a;倔强的石头的gitee主页 ⏩ 文章专栏&#xff1a;数据结构与算法刷题系列&#xff08;C语言&#xff09; 期待您的关注 目录

互联网十万个为什么之 什么是Kubernetes(K8s)?

Kubernetes&#xff08;通常简称为K8s&#xff09;是一款用于自动部署、扩缩和管理容器化应用程序的开源容器编排平台。Kubernetes已发展为现代企业实现敏捷开发、快速迭代、资源优化及灵活扩展的关键技术组件之一。它拥有庞大的开源社区和丰富的生态系统。围绕Kubernetes已经形…

深度强化学习 Actor-Critic演员评论家 PPO

将策略(Policy Based)和价值(Value Based)相结合的方法&#xff1a;Actor-Critic算法&#xff0c;在强化学习领域最受欢迎的A3C算法&#xff0c;DDPG算法&#xff0c;PPO算法等都是AC框架。 一、Actor-Critic算法简介 Actor-Critic从名字上看包括两部分&#xff0c;演员(Actor…

《拯救大学生课设不挂科第四期之蓝桥杯是什么?我是否要参加蓝桥杯?选择何种语言?如何科学备赛?方法思维教程》【官方笔记】

背景&#xff1a; 有些同学在大一或者大二可能会被老师建议参加蓝桥杯&#xff0c;本视频和文章主要是以一个过来人的身份来给与大家一些思路。 比如蓝桥杯是什么&#xff1f;我是否要参加蓝桥杯&#xff1f;参加蓝桥杯该选择何种语言&#xff1f;如何科学备赛&#xff1f;等…