NeroReflex

Inserimento elementi albero binario

May 19th, 2016
246
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.11 KB | None | 0 0
  1. struct nodo{int info; nodo* left,*right;nodo(int a=0, nodo* b=0, nodo* c=0){info=a; left=b; right=c;}};
  2.  
  3. //PRE=(TREE(R) è albero binario corretto)
  4. int conta_nodi(nodo* R) {
  5.     return (!R)? 0 : 1 + conta_nodi(R->left) + conta_nodi(R->right);
  6. }
  7. //POST=(restituisce il n. di nodi di TREE(R))
  8.  
  9. //PRE=TREE(R) albero corretto e vTREE(R)=TREE(R), n punta ad un nodo valido o NULL
  10. nodo* insert(nodo*R,nodo* n) {
  11.     if (!R) R = n; //R e' un albero vuoto: n e' il nuovo albero
  12.     else { //R NON e' vuoto: devo cercare il sotto-albero vuoto piu' vicino
  13.         int selezionato_per_inserimento = (conta_nodi(R->left) <= conta_nodi(R->right))? 0 : 1;
  14.        
  15.         //e inserire in quello il nuovo sotto-albero n
  16.         if (selezionato_per_inserimento) R->right = insert(R->right, n);
  17.         else R->left = insert(R->left, n);
  18.     }
  19.     return R;
  20. }
  21. //POST=TREE(R) è vTREE(R) con in più n come nuova foglia e per ogni nodo x del cammino da R alla foglia n
  22. //è vero che n di trova nel sotto-albero di x in vTREE(R) che ha meno nodi, o a parità di nodi nei 2 sotto-alberi,
  23. //n si trova nel sotto-albero sinistro
Advertisement
Add Comment
Please, Sign In to add comment