cecema

Untitled

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