zoukankan      html  css  js  c++  java
  • 从上到下打印二叉树——层序遍历二叉树

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

    例如输入

          8
        / 
       6    10
      /     /
     5  7   9  11

    输出8   6   10   5   7   9   11。

    二叉树结点的定义如下:

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

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

    既然我们已经确定数据容器是一个队列了,现在的问题就是如何实现队列。实际上我们无需自己动手实现,因为STL已经为我们实现了一个很好的deque(两端都可以进出的队列)。下面是用deque实现的参考代码:

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

      

  • 相关阅读:
    1864: [Zjoi2006]三色二叉树
    3611: [Heoi2014]大工程
    2286: [Sdoi2011]消耗战
    2298: [HAOI2011]problem a
    2037: [Sdoi2008]Sue的小球
    P4512 【模板】多项式除法
    P4238 【模板】多项式求逆
    3771: Triple
    P3365 改造二叉树
    1191: [HNOI2006]超级英雄Hero
  • 原文地址:https://www.cnblogs.com/heyonggang/p/3405282.html
Copyright © 2011-2022 走看看