Algorithm 如何使用存储在leaf中的给定元素构建堆?

Algorithm 如何使用存储在leaf中的给定元素构建堆?,algorithm,data-structures,heap,Algorithm,Data Structures,Heap,我有n个数字,我需要构建一个堆数据结构,这样所有n个数字都将存储在堆的叶节点中,所有内部节点都将存储在该内部节点的左或右子树中的最小数字 请给我推荐一个有效的算法 您可以将数据结构建立在赢家树的基础上。看看这个链接,看看它是如何运行的 这就是你要找的吗?这里,节点i的子节点是2*i和2*i+1。也假设n是2的幂,但可以推广 int* create_heap(int* input , int n ){ int * heap = (int*) malloc(sizeof(int)*2*n)

我有n个数字,我需要构建一个堆数据结构,这样所有n个数字都将存储在堆的叶节点中,所有内部节点都将存储在该内部节点的左或右子树中的最小数字


请给我推荐一个有效的算法

您可以将数据结构建立在赢家树的基础上。看看这个链接,看看它是如何运行的


这就是你要找的吗?这里,节点i的子节点是2*i和2*i+1。也假设n是2的幂,但可以推广

int* create_heap(int* input , int n ){

    int * heap = (int*) malloc(sizeof(int)*2*n);

    for(int i = n ; i<2*n ; i++){
       heap[i] = a[i-n];
    }

    for(int i=n-1 ; i>0 ; i--){
        heap[i] = heap[2*i] < heap[2*i+1] ? heap[2*i] : heap[2*i+1];
    }
    return heap;

}
int*创建\u堆(int*输入,int n){
int*heap=(int*)malloc(sizeof(int)*2*n);
对于(int i=n;i0;i--){
堆[i]=堆[2*i]<堆[2*i+1]?堆[2*i]:堆[2*i+1];
}
返回堆;
}

如果您先发布自己的解决方案就好了。这样,人们就更容易提高效率或提出不同的解决方案,我不明白。如果所有的
n
数字都存储在叶子中,那么除了叶子之外,堆的其他部分应该是什么呢?我认为,如果数据只存储在叶子节点中,而不存储在内部节点中,根据定义,这就不再是堆了。