原創文章,轉載請注明出處!
1.題目
從上往下打印出二叉樹的每個節點,同層節點從左至右打印。例如:
圖 不分行從上往下按層打印二叉樹的順序為8-6-10-5-7-9-11
2.思路
本題使用隊列做為輔助容器,利用隊列的先進先出策略,按層打印二叉樹。舉例:首先,將根節點壓入隊列;然后,先將隊首元素放入存儲遍歷結果的vector中,再判斷隊首節點是否有左右子節點,如果有左右子節點,則將做右子節點壓入隊列,隊首元素彈出隊首,循環執行直至隊列為空。最后,將存儲遍歷結果的vector返回。
3.代碼
1 /* 2 struct TreeNode { 3 int val; 4 struct TreeNode *left; 5 struct TreeNode *right; 6 TreeNode(int x) : 7 val(x), left(NULL), right(NULL) { 8 } 9 };*/ 10 class Solution { 11 public: 12 vector<int> PrintFromTopToBottom(TreeNode* root) { 13 14 // 存儲結果 15 vector<int> result; 16 17 // 邊界條件 18 if(root == NULL) 19 return result; 20 21 // 輔助容器:雙端隊列(存儲指向二叉樹節點的指針) 22 queue<TreeNode*> q; 23 24 // 輔助指針:指向隊列彈出的指針 25 TreeNode* fr; 26 27 // 根節點入隊列 28 q.push(root); 29 30 // 遍歷隊列 31 while(!q.empty()) 32 { 33 // 34 fr=q.front(); 35 result.push_back(fr->val); 36 if(fr->left != NULL) 37 q.push(fr->left); 38 if(fr->right != NULL) 39 q.push(fr->right); 40 q.pop(); 41 } 42 43 return result; 44 } 45 };