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.

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top