练习 #5
Coddy 堆与优先队列:数据结构系列 #7 课程的第 14 课,共 14 课。
挑战
简单编写一个函数 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 在线编译器