Se siamo in grado di recuperare l'elemento successivo allo stesso livello, abbiamo finito. Come per la nostra conoscenza prima , siamo in grado di accedere a questi elementi utilizzando ampiezza primo attraversamento.
Ora unico problema è come controllare se siamo finalmente elemento a qualsiasi livello. Per questo motivo, dovremmo aggiungendo un delimitatore (NULL in questo caso) per marcare fine di un livello.
Algoritmo: 1. Mettere radici nella coda.
2. NULL Mettere in coda.
3. Mentre coda non è vuota
4. x = recuperare primo elemento dalla coda
5. Se x non è NULL
6. x-> rpeer <= elemento superiore della coda.
7. put sinistro e figlio destro di x nella coda
8. altro
9. se coda non è vuota
10. put NULL nella coda
11. fine se
12. fine, mentre
13. ritorno
#include <queue>
void print(tree* root)
{
queue<tree*> que;
if (!root)
return;
tree *tmp, *l, *r;
que.push(root);
que.push(NULL);
while( !que.empty() )
{
tmp = que.front();
que.pop();
if(tmp != NULL)
{
cout << tmp=>val; //print value
l = tmp->left;
r = tmp->right;
if(l) que.push(l);
if(r) que.push(r);
}
else
{
if (!que.empty())
que.push(NULL);
}
}
return;
}