Advertisement
disiodj

Alberi_Esercizi

Dec 6th, 2015
304
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.56 KB | None | 0 0
  1. ------------------------------------------------------------------------------
  2. CERCA(t,n){
  3. CERCARIC(t.root, n) //questo serve perchè l'utente vuole lanciare su una lista, io invece voglio un tipo t.root, e quindi lo lancio su t.root
  4. }
  5. CERCARIC(t, n) //in pre-ordine{
  6. if(t==null)
  7. return FALSE;
  8. if(t.info==n)
  9. return TRUE;
  10. else{
  11. k=CERCA(t.left, n);
  12. c = CERCA(t.right,n);
  13. return k || c;
  14. }
  15. }
  16.  
  17. CERCARIC(t.root, n) //in post ordine.
  18. if(t==NULL)
  19. return false;
  20. if(CERCARIC(t.left,n))
  21. return TRUE;
  22. if(CERCARIC(t.right), n)
  23. return false;
  24. return t.info == n;
  25.  
  26. CERCARIC(t.root,n) //in Simmetrico
  27. if(t==NULL)
  28. return false;
  29. l=CERCARIC(t.left, n);
  30. if(t.info==n)
  31. return true;
  32. k = CERCARIC(t.right, n);
  33. return l||k;
  34.  
  35. -----------------------------------------------------------------------
  36.  
  37. CONTA-NODI(t)
  38. if(t==null)
  39. return 0;
  40. return CONTARIC(t.root, n)
  41.  
  42. CONTARIC(t) //Questo è in Pre-Ordine
  43. if(t==null)
  44. return -1;
  45. return 1+(CONTARIC(t.left)+CONTARIC(t.right));
  46.  
  47. //Ora faccio in post-ordine, è più complesso
  48. CONTARIC(n)
  49. //devo tornare il numero dei nodi del sottoalbero destro e sinistro, +1 che sono io.
  50. l=r=0;
  51. if(n.left=!null)
  52. l = CONTARIC(n.left);
  53. if(n.right!=null)
  54. r=CONTARIC(n.right);
  55. return r+l+1;
  56.  
  57. ---------------------------------------------------------------
  58. CAMMINO(t)
  59. CAMMINORIC(t.root)
  60.  
  61. CAMMINORIC(t)
  62. if(t==NULL)
  63. return TRUE
  64. if((t.left && t.right)!=NULL)
  65. return false
  66. else
  67. return CAMMINORIC(t.left) || CAMMINORIC(t.right)
  68.  
  69. -----------------------------------------------------------------
  70.  
  71. HEIGHT(t)
  72. HERIC(t.root)
  73.  
  74. HERIC(t) //Questa è in post Ordine
  75. if(t==NULL)
  76. return 0;
  77. else
  78. l= HERIC(t.left);
  79. r =HERIC(t.right);
  80. return MAX(l,r)+1; //Max è una funzione che ritorna il massimo tra due numeri.
  81.  
  82. //Se lo volessimo fare in preordine, dovrei protarmi l'altezza dall'alto, quindi la radice la lancio e dico che ha alatezza zero, ogni genitori informa il figliod ella sua altezza e poi a questo punto quando tornano su i valori un o verifica che il figlio sinistro e il figlio destro che valori tornano al massimo.
  83. Se sono su un nodo generico e mi hanno dato l'altezza, lancio sul figlio sinistro e destro, quelli che ritornano la massima altezza che hanno visto, io adesso devo ritornare la massima altezza che ho visto che è la massima del figlio destro e sinistro del mio valore.
  84.  
  85. --------------------------------------------------------------
  86. AVERAGE(t)
  87. c = CONTA-NODI(t.root)
  88. return AVERAGERIC(t.root)/c
  89.  
  90. AVERAGERIC(t)
  91. if(t==null)
  92. return 0;
  93. else{
  94. l = AVERAGERIC(t.left)
  95. r = AVERAGERIC(t.right);
  96. return l+r+t.info;
  97.  
  98. ----------------------------------------------------------------------
  99. //CHIEDI se corretto
  100. COMPLETO(t)//funzione che verifica se un albero è completo.
  101. h = HEIGHT(t);
  102. return COMPLETORIC(t.root, h)
  103.  
  104. COMPLETORIC(n,h)
  105. if(n==NULL)
  106. return i==-1;
  107.  
  108. else
  109. return COMPLETORIC(n.left, i-1) && COMPLETORIC(n.right, i-1);
  110.  
  111. --------------------------------------------------------------------------
  112.  
  113. DEALLOCA(t)
  114. if(t.root==null)
  115. return;
  116. DEALLOCARIC(t.root)
  117. t.root=null;
  118.  
  119. DEALLOCARIC(t)
  120. if(t.left!=null)
  121. DEALLOCARIC(n.left);
  122. if(t.right!=null)
  123. DEALLOCARIC(t.right);
  124. FREE(t);
  125. return;
  126.  
  127. -----------------------------------------------------------------
  128. //CHIEDI la correttezza
  129. POTA(t,x) //elimina un sottoalbero a partire da un nodo x
  130. return POTARIC(t.root, x)
  131.  
  132. POTARIC(t, x)
  133. if(t==null)
  134. return FALSE;
  135.  
  136. if(t==x)
  137. FREE(t);
  138. return TRUE;
  139. else
  140. return (POTA(t.left,x))||(POTA(t.right,x));
  141. ---------------------------------------------------------------------
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement