Transversal de ordem de nível de uma árvore binária

void traverse(Node* root)
{
    queue<Node*> q;

    Node* temp_node= root;

    while(temp_node)
    {
        cout<<temp_node->value<<endl;

        if(temp_node->left)
            q.push(temp_node->left);

        if(temp_node->right)
            q.push(temp_node->right);

        if(!q.empty())
        {
            temp_node = q.front();
            q.pop();
        }
        else
            temp_node = NULL;
   }
 }

O código postado acima é o meu código de passagem de nível. Esse código funciona bem para mim, mas uma coisa que eu não gosto é que estou inicializando explicitamentetemp_node = NULL ou eu uso pausa. Mas isso não parece ser um bom código para mim.

Existe uma implementação elegante do que isso ou como posso melhorar esse código?

questionAnswers(6)

yourAnswerToTheQuestion