修复C中的堆属性数据结构

时间:2015-02-28 22:18:17

标签: c data-structures heap

我试图编写一个恢复堆属性的函数。但是我总是得出不好的结果。

void fixHeap(int heapSize, struct Edge* edgeArray, int i){//edgeArray is our heap-array.
    int leftSon = leftSonIndex(i);
    int rightSon = rightSonIndex(i);
    int change;
    if((leftSon <= heapSize) && (edgeArray[i].cost < edgeArray[leftSon].cost)){
        change = leftSon;
    }else{
        change = i;
        if((rightSon <= heapSize) && (edgeArray[change].cost < edgeArray[rightSon].cost)){
            change = rightSon;
        }
    }

    if(change != i){
        swap(edgeArray, i, change);
        i = change;

        fixHeap(heapSize, edgeArray, i);
    }

}

1 个答案:

答案 0 :(得分:3)

问题是,如果您在第一个leftSon块中选择change作为if,那么您不会将其与rightSon进行比较,以检查{是否{ {1}}&gt; rightSon
因此,在这种情况下你的例子会失败 - :

leftSon

应该如何 - :

  5
 / \
6   7