经典算法学习——层序遍历二叉树

       我们可以用很多方式去遍历一颗二叉树,比如先序遍历,中序遍历,后序遍历,其实都是通过递归的来实现。今天我们来对二叉树进行层序遍历,层序遍历的时候需要借助另一种数据结构——队列。本篇的示例代码上传至 https://github.com/chenyufeng1991/LevelOrderBinaryTree 。

       层序遍历的基本思路是,当访问到一个节点的时候,把它放入队列,然后访问该值,同时把该节点的左右孩子节点放入队列,出队列该节点。其中需要注意的是,如果某个节点已经是叶子节点了,则不需要把它的左右孩子节点(虽然它没有左右孩子)放入队列。因为把一个空的节点push进队列会造成bug。同样的,如果它只有左孩子或者只有右孩子,也是同样的处理。递归结束的条件是当队列为空时结束。

核心代码如下:

//层序遍历
void LevelOrder(queue<Node *> &nodeQueue)
{
    if (nodeQueue.empty())
    {
        return;
    }

    Node *frontNode = nodeQueue.front();
    cout << frontNode->element << " ";
    nodeQueue.pop();
    if (frontNode->lChild != NULL)
    {
        nodeQueue.push(frontNode->lChild);
    }
    if (frontNode->rChild != NULL)
    {
        nodeQueue.push(frontNode->rChild);
    }

    LevelOrder(nodeQueue);
}


你可能感兴趣的:(二叉树,遍历)