完全二叉树的权值

完全二叉树的权值,第1张

题目描述

完全二叉树的权值(双指针)-原题链接
给定一棵包含 N N N 个节点的完全二叉树,树上每个节点都有一个权值,按从上到下、从左到右的顺序依次是 A 1 , A 2 , ⋅ ⋅ ⋅ A N A1,A2,⋅⋅⋅AN A1,A2,AN,如下图所示:


现在小明要把相同深度的节点的权值加在一起,他想知道哪个深度的节点权值之和最大?

如果有多个深度的权值和同为最大,请你输出其中最小的深度。

注:根的深度是 1。

C++
#include 
#include 
#include 
using namespace std;
typedef long long LL;

const int N = 1e5 + 10;
int n;
int a[N];

int main() {
    cin >> n;
    
    for (int i = 1; i <= n; i++) cin >> a[i];
    
    int ansdep;
    LL anssum = -1e9;
    for (int deep = 0, i = 1; i <= n; i++) {
        LL sum = 0;
        int j;
        for (j = i; j <= n && j < (i + (1 << deep)); j++) sum += a[j];
        if (sum > anssum) {
            ansdep = deep + 1;
            anssum = sum;
        }
        i = j - 1;
        deep++;
    }
    
    cout << ansdep;
    
    return 0;
}

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/676200.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-19
下一篇 2022-04-19

发表评论

登录后才能评论

评论列表(0条)

保存