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