从上往下打印二叉树

题目:从上而下打印出二叉树的每个节点,同一层的结点按照从左往右的顺序打印。二叉树结点定义如下:

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


分析:就是二叉树的按层遍历,即广度优先遍历。利用队列进行编程。每一次打印一个节点的时候,如果该节点有子节点,则把该节点的子节点放到一个队列的末尾。接下来到队列的头部去除最早放入队列的结点,重复前面的操作,直至队列中所有节点都被打印出来为止。

实现如下:

void PrintFromTopToBottom(BinaryTreeNode* pTreeRoot)
{
    if(!pTreeRoot)
        return;
        
    std::deque<BinaryTreeNode *>dequeTreeNode;
    
    dequeTreeNode.push_back(pTreeRoot);
    
    while(dequeTreeNode.size())
    {
        BinaryTreeNode *pNode=dequeTreeNode.front();
        dequeTreeNode.pop_front();
        printf("%d",pNode-m_nValue);
        if(pNode->m_pLeft)
            dequeTreeNode.push_back(pNode->m_pLeft);
        if(pNode->m_pRight)
            dequeTreeNode.push_back(pNode->mpRight);
    }
}


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