剑指offer之从上往下打印二叉树

来源:互联网 发布:js filereader文件路径 编辑:程序博客网 时间:2024/05/17 05:56

题目:

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


分析:

     从上到下打印二叉树的规律:每一次打印一个结点的时候,如果该结点有子结点,则把该结点的子结点放到一个队列的末尾。接下来到队列的头部取出最早进入队列的结点,重复前面的打印操作,直至队列中所有的结点都被打印出来为止。

代码:

     

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->m_pRight);
    }
}

0 0
原创粉丝点击