目錄
1.題目
2.思路解析
3.代碼
1.題目
. - 力扣(LeetCode)
2.思路解析
對二叉樹進行層序遍歷,顧名思義,就是按每一層的順序對二叉樹一層一層地進行遍歷
思路如下
從第一層開始,先將二叉樹地頭放入隊列q,并設置一個只會指向隊頭的指針front=q.top(),
經過這一步的操作,我們便完成了二叉樹第一層的遍歷
接著,對二叉樹的第二層進行遍歷,先將第一層的節點從隊列q中探出,然后將其數據放入數組v
因為二叉樹第二層的節點就是第一層節點的子節點,所以這個時候我們只要使用第一層節點的指針域檢索到第二層節點并且放入隊q
然后再循環進行第一個節點進行過的操作,將節點彈出q,數據進去v
綜上所述首先要進行的循環(需要被重復操作的步驟)是要判斷q是否為空,這個while循環所需要循環的次數是直到整個二叉樹節點全部都被層序遍歷遍歷完畢為止?
如果隊q為空,那么說明二叉樹已經被全部遍歷完畢
緊接著第二個需要進行的循環便是對每個節點進行彈出q,再將其數據入v,最后將其子節點入q操作
3.代碼
class Solution {
public:vector<vector<int>> levelOrder(TreeNode* root) {vector<vector<int>> ans;if(root==nullptr) return ans;queue<TreeNode*> q;q.push(root);int numlaynode=1;while(!q.empty()){vector<int> v;while(numlaynode!=0){numlaynode--;TreeNode*front=q.front();q.pop();v.push_back(front->val);if(front->left!=nullptr){q.push(front->left);}if(front->right!=nullptr){q.push(front->right);}}numlaynode=q.size();ans.push_back(v);}return ans;}
};