從上到下打印二叉樹——層序遍歷二叉樹

題目:從上往下打印出二叉樹的每一個結點,同一層的結點按照從左到右的順序打印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);
	}
}
相關文章
相關標籤/搜索