剑指offer_面试题_从上往下打印二叉树

题目:从上往下打印出二叉树的每一个结点。同一层的结点依照从左到右的顺序打印。比如输入图4.5中的二叉树。则依次打印出8、6、10、5、7、9、11。

             8

          /    

        6     10

      /       /  

    5    7 9   11

思路:树的层序遍历。应用 队列 这一数据容器。如上图的输出顺序,每当父结点出队(输出),孩子结点才会入队。

算法例如以下:

/**层序遍历*/
void PrintFromToBottom(TreeNode *pRoot)
{
    if(NULL == pRoot)
        return;

    queue<TreeNode *> temp;        /**定义一个存放二叉树结点的队列*/
    temp.push(pRoot);              /**头结点入栈*/

    while(!temp.empty())
    {
        TreeNode *p = temp.front();  /**获取队列头部数据*/
        cout << p->m_pValue << ' ';

        temp.pop();                  /**头部数据出栈,让它的左右孩子结点入栈*/

        if(p->lchild)
            temp.push(p->lchild);
        if(p->rchild)
            temp.push(p->rchild);
    }
    cout << endl;
}

/* 点滴积累,我的一小步 */

原文地址:https://www.cnblogs.com/slgkaifa/p/7020228.html