Advertisement
cecema

Untitled

Jan 22nd, 2018
71
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.10 KB | None | 0 0
  1. Algo_it(T,h){
  2. ret=-1;
  3. curr=T;
  4. s=0;
  5. d=0;
  6. stack_curr=NIL;
  7. stack_s=NIL;
  8. last=NIL;
  9. while(curr!=NIL || stack_curr!=NIL){
  10. if(curr!=NIL){
  11. if(curr->sx!=NIL || curr->dx!=NIL){ //uso questo if per poter ottenere lo stesso risultato dell'algo ric
  12. if(curr->sx!=NIL){ //quando un nodo dell'albero non ha figli.
  13. push(stack_curr,curr);
  14. h++;
  15. ret=-1; //inizializzo variabili ad ogni discesa.
  16. s=0;
  17. d=0;
  18. curr=curr->sx;
  19. }else{
  20. if(curr->dx!=NIL){
  21. push(stack_curr,curr);
  22. push(stack_s,s); //se scendo a destra salvo s nello stack_s.
  23. h++;
  24. ret=-1; //inizializzo variabili ad ogni discesa.
  25. s=0;
  26. d=0;
  27. curr=curr->dx;
  28. }
  29. }
  30. }else{ //in questo caso specifico un nodo non ha figli e quindi eseguo le oper.
  31. if(s=0 && d=0) //dell'algo ric.
  32. ret=h;
  33. else
  34. ret=s+d;
  35. last=curr;
  36. curr=NIL;
  37. POP(stack_curr);
  38. }
  39. }else{
  40. curr=top(stack_curr);
  41. h--; //non uso uno stack per H dato che quest'ultimo nell'algo ric. viene
  42. if(curr->dx!=NIL && curr->dx!=last){ // incrementato all'interno della chiamata e non con un'istruzione
  43. push(stack_curr,curr); // esplicita all'interno del codice.
  44. s=ret; //quindi quando scendo lo incremento, quando risalgo lo decremento.
  45. push(stack_s,s);
  46. ret=0; // se devo scendere a destra salvo s nello stack_s.
  47. s=0;
  48. d=0;
  49. h++;
  50. curr=curr->dx;
  51. }else{
  52. if(curr->dx!=NIL){
  53. s=top(stack_s); //se salgo da destra allora s lo trovo nello stack_s mentre d=ret
  54. d=ret; // perchè è l'ultimo valore aggiornato.
  55. POP(stack_s);
  56. }else{
  57. s=ret; //se a destra nn ho figli allora s=ret mentre d=0 e nn -1 perchè
  58. d=0; //a destra nn scendo e quindi d rimarrà uguale a 0, cioè al valore
  59. } //inizializzato.
  60. if(s=0 && d=0)
  61. ret=h;
  62. else //Operazioni dell'algo ric.
  63. ret=s+d;
  64. last=curr;
  65. curr=NIL;
  66. POP(stack_curr);
  67. }
  68. }
  69. }
  70. return ret;
  71. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement