Salve ragazzi, volevo chiedervi un aiuto.
Sto affrontando un esercizio che mi trasformi un albero binario in heap.
Il codice son riuscito a metterlo su, anche se credo che non funzioni proprio bene poichè inserendo alcuni dati delle slide non mi trovo con il risultato.
Credo che l'errore potrebbe essere o la mancanza di qualcosa o sia proprio nella funzione heapify poichè io non faccio altro che utilizzare l'algoritmo che si utilizza nella costruzione di un heap e non quello che mi permette di trasformarlo che prevede il confronto trai due figli di nodo, selezionare quello con chiave maggiore dopodichè confrontarlo col nodo padre.

Intanto vi posto l'esercizio con la traccia, spero che qualcuno possa guidarmi nella correzione.

codice:
/*
                            TRACCIA
Scrivere function C iterativa per la trasformazione in un heap di un albero binario rappresentato mediante array
*/

#include <stdio.h>
#include <stdlib.h>

#define MAXNODI 16

void heapify (int array_albero[], short int size_array_albero);

int main()
{
    int array_albero[MAXNODI];
    short int i, size_array_albero;
    array_albero[0] = -1;

    printf("Costruzione albero binario\n");
    printf("Inserisci numero dei nodi -> ");
    scanf("%hd", &size_array_albero);
    for(i=1; i<=size_array_albero;i++)
    {
        printf("\nInserisci %d nodo -> ", i);
        scanf("%d", &array_albero[i]);
    }

    heapify(array_albero, size_array_albero);

    printf ("\n\nL'albero binario ottenuto e' (per livelli):\n");
    printf("\n\nElemento\tPadre\tFiglio SX\tFiglio DX\n");
    printf("-----------------------------------------------------\n");

	for (i=1; i<=size_array_albero; i++)
	{
            printf(" %d\t\t", array_albero[i]);
            if(i == 1)
                printf("RADICE\t");
            else
                printf(" %d\t", array_albero[i/2]);
            if(2*i < size_array_albero)
                printf(" %d\t\t", array_albero[2*i]);
            else
                printf(" ND\t\t");
            if(2*i+1 < size_array_albero)
                printf(" %d\t\n", array_albero[2*i+1]);
            else
                printf(" ND\t\n");
	}
    return 0;
}
void heapify (int array_albero[], short int size_array_albero)
{
    short int i, j=size_array_albero, successo;
    int temp;

    while (j > 1)
    {
        i = j;
        while(i > 1 && array_albero[i] > array_albero[i/2])
        {
            temp = array_albero[i];
            array_albero[i] = array_albero[i/2];
            array_albero[i/2] = temp;

            i /= 2;
            successo = 1;
        }
        if(successo != 1)
        {
            j--;
        } else
        {
            successo = 0;
        }
    }
}