題目:從上往下打印出二叉樹的每個結點,同一層的結點按照從左到右的順序打印。
|
例如輸入
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); } }