Domanda
Ok, quindi sto cercando di fare un attraversamento ordine livello di un albero binario di ricerca e il suo non funziona. Il seguente codice ha senso per me, ma che è probabilmente perché ho cercato a esso per sempre e mi sono convinto che dovrebbe funzionare.
void BST<T>::levelByLevel(ostream &out) {
Queue<BinNodePointer> q;
BinNodePointer subtreeRoot;
if(myRoot == NULL)
return;
q.enqueue(myRoot);
while(!q.empty()) {
subtreeRoot = q.front();
out << subtreeRoot->data << " ";
q.dequeue();
if(subtreeRoot->left != NULL)
q.enqueue(subtreeRoot->left);
if(subtreeRoot->right != NULL)
q.enqueue(subtreeRoot->right);
}
}
Forse voi ragazzi poteste sottolineare quello che sto facendo, perché sbagliato, anche se capisco il concetto di un albero binario di ricerca, io non sono al 100% su tutti i pro ei contro.
Soluzione
Non c'è niente di sbagliato con il risultato.
Ci può spiegare come si arriva a 24,12,18?
ti assumo inserto 12 prima a livello di radice, quindi si inserisce 24, che finisce come un diritto nodo radice 12 quindi si inserisce 18, che finisce come nodo di sinistra 24 - perché 18 è più grande poi radice 12 in modo da andare a destra, quindi 18 è inferiore a 24 in modo che sia inserito proprio nodo 24
12
12
\
24
12
\
24
/
18
In modo da avere 3 livelli, livello 1 (12), il livello 2 (24), il livello 3 (18) in modo livello attraversamento 12,24,18 come l'algoritmo sta inserendo.