程式設計師面試一百題-12-從上往下遍歷二元樹
阿新 • • 發佈:2018-12-16
1-題目
:
輸入一棵二元樹,從上往下按層列印樹的每個結點,同一層中按照從左往右的順序列印。
2-示例
:
輸入以下二元樹,輸出10 7 15 5 8
3-思路
:
資料結構是佇列
,本質是在二元樹上實現廣度優先遍歷
。
4-程式碼
:
#include <deque> #include <iostream> using namespace std; //定義二元樹的結點 struct BTreeNode { int value; BTreeNode *pLeft; BTreeNode *pRight; }; void PrintFromTopToBottom(BTreeNode *pTreeRoot) { if (!pTreeRoot) { return; } //建立一個空佇列 deque<BTreeNode *> dequeTreeNode; //將根結點插入隊尾 //從根結點開始,滿足題目從上到下的要求 dequeTreeNode.push_back(pTreeRoot); //當佇列不為空 while (dequeTreeNode.size()) { //獲取隊頭的結點,列印該結點並讓其出列 BTreeNode *pNode = dequeTreeNode.front(); cout << pNode->value; dequeTreeNode.pop_front(); //若該結點左右子樹不為空,則遞迴 //先左後右,滿足題目從左到右的要求 if (pNode->pLeft) { dequeTreeNode.push_back(pNode->pLeft); } if (pNode->pRight) { dequeTreeNode.push_back(pNode->pRight); } } }