1. 程式人生 > >Q23:從上往下列印二叉樹

Q23:從上往下列印二叉樹

Q:從上往下打印出二叉樹的每個節點,同層按從左到右的順序列印。

這裡其實就是我們經常見的樹的層次遍歷。所以我們不禁想到要藉助隊列了。具體的過程如下:

1)將樹的根結點入隊

2)若佇列不空,則取出佇列的隊首元素pfront(出隊),列印其內容

3)若pfront的左孩子不為空,則其左孩子入隊,若其右孩子不空,則其右孩子入隊(注意這兩個判斷是並列關係,不是if ,else關係)

4)返回2)繼續

void VisitTreeLevelOrder( BinaryTreeNode *pRoot)
{
	if(NULL == pRoot)
		return;
	BinaryTreeNode *pVisit = pRoot;
	deque<BinaryTreeNode *> dequeTreeNode;
	dequeTreeNode.push_back(pVisit);
	while (!dequeTreeNode.empty())
	{
		BinaryTreeNode *pNode;
        pNode = dequeTreeNode.front();
		cout << pNode->m_nValue;
		if (pNode->m_pLeft)
			dequeTreeNode.push_back(pNode->m_pLeft);
		if(pNode->m_pRight)
			dequeTreeNode.push_back(pNode->m_pRight);
		dequeTreeNode.pop_front();
	}
}