PDA

View Full Version : [C] visita albero RB


diego86
17-07-2008, 19:13
ciao ragazzi, ho implementato un albero rb che contiene delle strutture ordinate per nome. Ora mi servirebbe scorrere l'albero al fine di ricercare tutti nodi che hanno un contatore con valore pari a quello cercato. Se dovevo ricercare in base al nome era semplice, confrontavo il nome col nodo corrente e mi spostavo a destra o sinistra in base al risultato del confronto, ma in questo caso devo scorrere TUTTI i nodi dell'albero per verificare il valore del contatore di ogni nodo. Qualcuno può aiutarmi? Devo fare una funzione ricorsiva o esiste qualche metodo di ricerca che possa funzionare, come le visite in ampiezza o in profondità? Grazie

71104
17-07-2008, 21:17
be' :mbe: non è che sia molto difficile visitare completamente un albero binario con una procedura ricorsiva, indipendentemente da che sia un albero RB o altro.

esempio in C:


typedef struct _NODE
{
struct _NODE *LeftChild, *RightChild;
// ...
}
NODE, *PNODE;

void Visit(PNODE Root)
{
if (Root == NULL)
{
return;
}

// ...

Visit(Root->LeftChild);
Visit(Root->RightChild);
}

diego86
18-07-2008, 10:48
void eliminah (albero_piastra *tree, piastra * x, int h){
if(x!=NULL){

if (x != tree->nil) {
eliminah(tree,x->left,h);
if(x->altezza == h)
elimina(x->nome);

eliminah(tree,x->right,h);
}
}

}

l'ho messa giu così...però (dando per scontato che la funzione elimina funziona perchè se la uso singolarmente non mi da problemi) a volte mi va in crash il programma... ho provato con 2 nodi di cui uno da eliminare e funziona, ma nella prova con 5 nodi e 2 da eliminare si blocca...