Ciao a tutti, vi propongo questa domanda di Algoritmi e Strutture dati.
Si proponga un algoritmo efficiente per estrarre il secondo elemento più piccolo da un RB-albero. Non sono ammessi campi aggiuntivi.
Un algoritmo simile secondo voi è sensato? (Lo scrivo in pseudo codice con commenti).
RB-SECMINIMUM(T,x) \\Come parametri prende un RB-albero T, e il puntatore x alla radice
while LEFT[x] div NIL \\Div sta per diverso
x = LEFT[x]
y = P[LEFT[x]] \\Questo è il secondo elemento più piccolo (il padre di left[x])
RB_DELETE(T,y) \\ Algoritmo per cancellare il nodo e risistemare le proprietà degli RB-alberi
RETURN(y)
Che dite?
PS: Purtroppo non riesco ad allineare correttamente il codice, comunque la procedura RB_DELETE e il return sono esterni al ciclo while.