Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Algo_ITERATIVO(T,k,P){
- curr=T;
- h1=0;
- h2=0;
- ret=-1;
- stack_h1=NIL;
- stack_curr=NIL;
- last=NIL;
- push(stack_curr,P); //Metto P nello stack come padre
- while(curr!=NIL || top(stack_curr)!=P){ //La condizione nel while è diversa da quella normalmente
- if(curr!=NIL){ //usata; in questo caso entrerò nel while fin quando non
- push(stack_curr); //arriverò al padre (N.B. Correzione di Benni)
- curr=curr->sx;
- ret=-1;
- }else{
- curr=top(stack_curr);
- if(curr->dx!=NIL && curr->dx!=last){ //devo scendere destra quindi salvo h1 nello stack
- h1=ret;
- push(stack_h1,h1);
- curr=curr->dx;
- ret=-1;
- }else{ //risalita
- Pop(stack_curr); //mi prendo il padre di curr
- P=top(stack_curr);
- if(curr->dx!=NIL){ //se salgo da destra h1 sara nello stack e ret sarà
- h1=top(stack_h1); //l'ultimo valore aggiornato
- pop(stack_h1);
- h2=h1+ret;
- }else{ //se a destra non ho figli allora h1 sarà ret e h2 sarà
- h1=ret; // -1 (cioè il valore di ritorno di ret nella chiamata
- h2=h1+(-1); // ricorsiva a destra dato che non ho figli)
- }
- ret=h2+1;
- if(ret>k && P!=NIL){
- last=curr;
- if(P->sx==curr)
- P->sx=Cancella_Radice(curr);
- else
- P->dx=Cancella_Radice(curr);
- }else
- last=curr;
- curr=NIL;
- }
- }
- }
- return ret;
- }
Advertisement
Add Comment
Please, Sign In to add comment