cecema

Untitled

Jan 23rd, 2018
262
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.46 KB | None | 0 0
  1. ALGO_IT(T){
  2. ret=0;
  3. sx=0;
  4. dx=0;
  5. curr=T;
  6. last=NIL;
  7. stack_sx=NIL; //uso stack per salvare il sx
  8. stack_curr=NIL;
  9. stack_ret=NIL; //uso stack per ret dato che mi servirà alla fine delle
  10. while(curr!=NIL ||stack_curr!=NIL){ //chiamate ricorsive
  11. if(curr!=NIL){
  12. if(curr->key%2==1)
  13. ret=curr->key;
  14. push(stack_curr,curr); //prima di scendere salvo ret
  15. push(stack_ret,ret);
  16. curr=curr->sx;
  17. ret=0; //reinizializzo ret ad ogni discesa come nell'algo ric
  18. }else{
  19. curr=top(stack_curr);
  20. if(curr->dx!=NIL && curr->dx!=last){ //se scendo a destra salvo il sx=ret nello stack_sx
  21. sx=ret;
  22. push(stack_sx,sx);
  23. curr=curr->dx;
  24. ret=0; //reinizializzo ret ad ogni discesa come nell' algo ric
  25. }else{
  26. if(curr->dx!=NIL){ //se risalgo da destra allora sx lo trovo nello stack_sx
  27. sx=top(stack_sx); //mentre ret è l'ultimo valore ottenuto
  28. POP(stack_sx,sx);
  29. dx=ret;
  30. }else{ //se non ho il figlio destro allora il sx=ret mentre dx=0
  31. sx=ret; //cioè al valore di ret nella discesa a destra nell'algo
  32. dx=0; //ricorsivo
  33. }
  34. ret=top(stack_ret); //recupero ret dallo stack_ret
  35. POP(stack_ret);
  36. ret+=sx+dx; //operazioni dell'algo ric.
  37. last=curr;
  38. curr=NIL;
  39. POP(stack_curr);
  40. }
  41. }
  42. }
  43. return ret;
  44. }
Advertisement
Add Comment
Please, Sign In to add comment