Если мы сможем получить следующий элемент на том же уровне, то все готово.Согласно нашим нашим предыдущим знаниям , мы можем получить доступ к этому элементу, используя первый обход ширины.
Теперь единственная проблема состоит в том, как проверить, находимся ли мы, наконец, на каком-либо уровне.По этой причине мы должны добавить разделитель (в данном случае NULL), чтобы отметить конец уровня.
Алгоритм: 1. Поместить root в очередь.
2. Поместить NULL в очередь.
3. Пока очередь не пуста
4. x = извлечь первый элемент из очереди
5. Если x не равен NULL
6. x-> rpeer <= верхний элемент очереди. <br>7. поместите левого и правого дочернего элемента x в очередь
8. else
9. если очередь не пуста
10. поместите NULL в очередь
11. end, если
12. end end
13. возврат
#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;
}