试题 历届真题 完全二叉树的权值【第十届】【省赛】【B组】

**

完全二叉树的权值满分解法

**


一、完整题目

在这里插入图片描述


二、解题思路

本题是考察我们对数据结构第五章树的掌握程度的考察,题目不难,应该也算是一道签到题了,考察到的知识点有:

  • 在二叉树的第i层上至多有2^(i-1)个节点
  • 深度为k的二叉树至多有(2^k)-1个节点
  • 具有n个节点的完全二叉树的深度为[log2n]+1

因此,本题的思路也就非常简单了:

  • 首先输入n,确定一共有几个节点
  • 需要设置一个求和的变量,但是取值范围要注意,需要使用 long long int类型
  • 设置两层循环,最外层是层数,内层为每层的结点数
  • 每次循环输入一个节点,并加到tol中,每次每层求和完毕,与上层结果比较,如果比上层大,就标记下来
  • 循环完成,将标记变量中的值输出即可

话不多说,上代码

三、编写代码

#include <stdio.h>
#include <math.h>

#define INF 0x3f3f3f
typedef long long int LLint;

int main()
{
    int n,x;//输入变量
    int i,j;//循环使用
    int deepNum=0,max=-INF;//运算使用
    int depth=1,length=1;
    LLint tol;
    //输入
    scanf("%d",&n); 
    //计算权值和,层数=log2(n+1)
    for(i=0;i<n;depth++,length*=2)//每一层
    {
        tol=0;//置0
        for(j=0;j<length && i<n;++i,++j)
        {
            scanf("%d",&x);//输入权值
            tol+=x;//每一层的权值和
        }           
        if(tol>max)
        {
            max=tol;
            deepNum=depth;//记录下层号
        }
    }
    //输出
    printf("%d",deepNum);

    return 0;
}

四、测评结果

在这里插入图片描述

在这里插入图片描述

通过所有的测试点


五、总结评价

虽然是两层循环,但是一共只输入了n个节点值,所以时间复杂度为O(n),可以知道,效率是比较高的。通过此题我们复习了一边完全二叉树的一些知识,这些基础知识是一定需要掌握的,一旦你知道这些知识点,对于解题的帮助是,非常大的。

有问题欢迎各位大佬指出
蓝桥杯系列将持续更新,欢迎关注,一起学习

  • 27
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 12
    评论
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

S1XmKl

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值