Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- struct nodo{int info; nodo* left,*right;nodo(int a=0, nodo* b=0, nodo* c=0){info=a; left=b; right=c;}};
- //PRE=(TREE(R) è albero binario corretto)
- int conta_nodi(nodo* R) {
- return (!R)? 0 : 1 + conta_nodi(R->left) + conta_nodi(R->right);
- }
- //POST=(restituisce il n. di nodi di TREE(R))
- //PRE=TREE(R) albero corretto e vTREE(R)=TREE(R), n punta ad un nodo valido o NULL
- nodo* insert(nodo*R,nodo* n) {
- if (!R) R = n; //R e' un albero vuoto: n e' il nuovo albero
- else { //R NON e' vuoto: devo cercare il sotto-albero vuoto piu' vicino
- int selezionato_per_inserimento = (conta_nodi(R->left) <= conta_nodi(R->right))? 0 : 1;
- //e inserire in quello il nuovo sotto-albero n
- if (selezionato_per_inserimento) R->right = insert(R->right, n);
- else R->left = insert(R->left, n);
- }
- return R;
- }
- //POST=TREE(R) è vTREE(R) con in più n come nuova foglia e per ogni nodo x del cammino da R alla foglia n
- //è 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,
- //n si trova nel sotto-albero sinistro
Advertisement
Add Comment
Please, Sign In to add comment