Ciao,
Hai chiaro come è strutturato uno heap? La funzione di ricerca non è molto complicata da effettuare...
Parti dalla radice e visita ricorsivamente (i figli del nodo in posizione i sono sempre in posizione 2i e 2i+1). Quando entri in un nodo che contiene un valore maggiore di quello che stai cercando interrompi la ricorsione, altrimenti prosegui su entrambi i figli (ovviamente se esistono).
Quando entri in un nodo che ha il valore che cerchi puoi uscire dalla funzione e ritornarne l'indice. Se arrivi al termine delle chiamate ricorsive restituisci -1 poiché quello che cerchi non si trova nello heap.
Uno scheletro può essere il seguente:
int cercaHeap(int* heap,int indice,int valore){
//controlli heap[indice]
//Se è quello che ti interessa ritorni indice
//Se è maggiore ritorni -1
//Se è minore
//Cerchi nel primo figlio
int risultato=cercaHeap(heap,indice*2,valore);
//Se risultato è -1 cerchi nell'altro
risultato=cercaHeap(heap,indice*2+1,valore);
//Torni il risultato. Sarà -1 o l'indice trovato
}
La cosa può anche essere fatta in maniera non ricorsiva, oppure mantenendo la ricorsione e controllando subito il nodo corrente ed i due figli per risparmiare un passaggio.
Ciaociao