剑指Offer—从上向下打印二叉树

题目:从上到下打印二叉树的每个节点,同层的节点按照从左向右打印。

解析:即分层遍历二叉树。利用广度优先遍历的思想,遍历树或者有向图,都可在队列中完成。

step1:把起始节点放入队列。

step2:每次从队头取出节点,遍历(输出)。接下来,把从该节点能到达的节点(子树或者其他)都依次放入队列。

重复step2,直到队列中的节点为空。

//剑指Offer——按层遍历二叉树
#include <iostream>
#include <stack>
#include <stdio.h>
using namespace std;

struct BinaryTreeNode
{
    int m_nvalue;
    BinaryTreeNode *m_pLeft;
    BinaryTreeNode *m_pRight;
};

//利用广度优先遍历思想,
void PrintTreeWithLayer(BinaryTreeNode *pRoot)
{
    if(pRoot==NULL)
        return;
    //创建队列对象dequeNode
    deque<BinaryTreeNode*> dequeNode;
    //将根节点从队尾插入.push_back().
    dequeNode.push_back(pRoot->m_nvalue);

    //循环条件:队列不为空。
    while(dequeNode.size())
    {
        //定义队头结点.front().
       BinaryTreeNode *pNode=dequeNode.front();
       //取出队头结点.pop_front(),
       dequeNode.pop_front();
       printf("%d",pNode->m_nvalue);

       //如果左子树不为空,则入队
       if(pNode->m_pLeft)
        dequeNode.push_back(pNode->m_pLeft);
       //如果右子树不为空,则入队
       if(pNode->m_pRight)
        dequeNode.push_back(pNode->m_pRight);
    }
}


你可能感兴趣的:(剑指Offer—从上向下打印二叉树)