下堆在C语言中的实现

下堆在C语言中的实现,c,algorithm,data-structures,C,Algorithm,Data Structures,我有C语言的Downheap源代码,它将在不违反堆属性的情况下向下移动元素(每个节点的值大于/小于或等于其父节点的值,最小/最大值元素位于根节点) downheap(int k) { int temp, i; temp = a[k]; while(k <= N/2) { i = 2*k; if(i < N && a[i] < a[i+1]) i++; if(temp > a[i

我有C语言的
Downheap
源代码,它将在不违反堆属性的情况下向下移动元素(每个节点的值大于/小于或等于其父节点的值,最小/最大值元素位于根节点)

downheap(int k)
{
    int temp, i;
    temp = a[k];
    while(k <= N/2)
    {
        i = 2*k;
        if(i < N && a[i] < a[i+1]) i++;
        if(temp > a[i]) break;
        a[k] = a[i]; k = i;
    }
    a[k] = temp;
}
下堆(int k)
{
内部温度,i;
温度=a[k];
当(ka[i])断裂时;
a[k]=a[i];k=i;
}
a[k]=温度;
}
N
是数组
a
的节点总数。我质疑这个程序是否可以从左到右向下移动节点来维护属性?如何证明它,因为不存在右节点必须小于/大于左节点的属性

downheap(int k)//k是堆中项的索引
{
内部温度,i;
temp=a[k];//使用temp存储项目

while(k)我想你弄混了。一个(完整的)二叉树不需要任何形式的顺序。一棵树是二叉树,如果每个节点最多连接三条边(一条用于父节点,两条用于子节点)就这样。你不需要证明结果是一个二叉搜索树。不管怎么说,你都很难证明这一点,因为堆没有这个属性。