cecema

Algo_it

Jan 19th, 2018
300
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.46 KB | None | 0 0
  1. Algo_ITERATIVO(T,k,P){
  2. curr=T;
  3. h1=0;
  4. h2=0;
  5. ret=-1;
  6. stack_h1=NIL;
  7. stack_curr=NIL;
  8. last=NIL;
  9. push(stack_curr,P); //Metto P nello stack come padre
  10. while(curr!=NIL || top(stack_curr)!=P){ //La condizione nel while è diversa da quella normalmente
  11. if(curr!=NIL){ //usata; in questo caso entrerò nel while fin quando non
  12. push(stack_curr); //arriverò al padre (N.B. Correzione di Benni)
  13. curr=curr->sx;
  14. ret=-1;
  15. }else{
  16. curr=top(stack_curr);
  17. if(curr->dx!=NIL && curr->dx!=last){ //devo scendere destra quindi salvo h1 nello stack
  18. h1=ret;
  19. push(stack_h1,h1);
  20. curr=curr->dx;
  21. ret=-1;
  22. }else{ //risalita
  23. Pop(stack_curr); //mi prendo il padre di curr
  24. P=top(stack_curr);
  25. if(curr->dx!=NIL){ //se salgo da destra h1 sara nello stack e ret sarà
  26. h1=top(stack_h1); //l'ultimo valore aggiornato
  27. pop(stack_h1);
  28. h2=h1+ret;
  29. }else{ //se a destra non ho figli allora h1 sarà ret e h2 sarà
  30. h1=ret; // -1 (cioè il valore di ritorno di ret nella chiamata
  31. h2=h1+(-1); // ricorsiva a destra dato che non ho figli)
  32. }
  33. ret=h2+1;
  34. if(ret>k && P!=NIL){
  35. last=curr;
  36. if(P->sx==curr)
  37. P->sx=Cancella_Radice(curr);
  38. else
  39. P->dx=Cancella_Radice(curr);
  40. }else
  41. last=curr;
  42. curr=NIL;
  43. }
  44. }
  45. }
  46. return ret;
  47. }
Advertisement
Add Comment
Please, Sign In to add comment