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


題目:從上往下打印出二叉樹的每個結點,同一層的結點按照從左到右的順序打印

 

 

例如輸入

 

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

  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM