【劍指offer】不分行從上到下打印二叉樹,C++實現(層序遍歷)


原創文章,轉載請注明出處!

本題牛客網地址

博客文章索引地址

博客文章中代碼的github地址

1.題目

      從上往下打印出二叉樹的每個節點,同層節點從左至右打印。例如:

image

圖  不分行從上往下按層打印二叉樹的順序為8-6-10-5-7-9-11

2.思路

      本題使用隊列做為輔助容器,利用隊列的先進先出策略,按層打印二叉樹。舉例:首先,將根節點壓入隊列;然后,先將隊首元素放入存儲遍歷結果的vector中,再判斷隊首節點是否有左右子節點,如果有左右子節點,則將做右子節點壓入隊列,隊首元素彈出隊首,循環執行直至隊列為空。最后,將存儲遍歷結果的vector返回。

image

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 };


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM