从上到下打印二叉树——层序遍历二叉树

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

 

 

例如输入code

 

      8
    /  \
   6    10
  /\     /\
 5  7   9  11blog

 

输出8   6   10   5   7   9   11。队列

 

二叉树结点的定义以下:table

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

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

既然咱们已经肯定数据容器是一个队列了,如今的问题就是如何实现队列。实际上咱们无需本身动手实现,由于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);
	}
}
相关文章
相关标签/搜索