Menu
CoddyTech

练习 #5

Coddy 堆与优先队列:数据结构系列 #7 课程的第 14 课,共 14 课。

challenge icon

挑战

简单

编写一个函数 isMinHeap,接收一个整数数组 arr,并返回该数组是否表示一个有效的最小堆。

当每个父节点都小于或等于它的子节点时,数组就是最小堆。具体来说,对于范围内的每个索引 i,都要满足 arr[i] <= arr[2*i + 1](左子节点存在时)以及 arr[i] <= arr[2*i + 2](右子节点存在时)。

根据定义,空数组和只含一个元素的数组都是最小堆。

你必须使用 MinHeap 类(由 minheap.<ext> 提供)。计算结果时,不要使用 sort、slice 等语言内置功能或标准库中的堆库。

亲手试试

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdbool.h>
#include "solution.h"

int main() {
    char line[8192];
    if (!fgets(line, sizeof(line), stdin)) line[0] = '\0';
    int arr[4096];
    int n = 0;
    char* tok = strtok(line, " \t\r\n");
    while (tok) { arr[n++] = atoi(tok); tok = strtok(NULL, " \t\r\n"); }
    bool r = isMinHeap(arr, n);
    printf("%s\n", r ? "true" : "false");
    return 0;
}

堆与优先队列:数据结构系列 #7中的所有课

自己练习: C 在线编译器