经典问题:广度优先遍历 用队列。 特点在于要分层输出。每层遍历完后向队列中压入nullptr.
出队时遇到nullptr说明当前层已经遍历完,再向队列中压入nullptr。 初始化是压入root,nullptr到队列中。
需要注意:出队时遇到Nullptr时,如果队列已经为空,说明已经遍历完成,不要再加入nullptr了,不然死循环了。
/**
* struct TreeNode {
* int val;
* struct TreeNode *left;
* struct TreeNode *right;
* };
*/
#include <queue>
class Solution {
public:
/**
*
* @param root TreeNode类
* @return int整型vector<vector<>>
*/
vector<vector<int> > levelOrder(TreeNode* root) {
// write code here
vector<vector<int> > ans;
if(root == nullptr){
return ans;
}
queue<TreeNode*> Q;
Q.push(root);
Q.push(nullptr);
vector<int> cur;
while(!Q.empty()){
auto *top = Q.front();
Q.pop();
if(top == nullptr){ //遇到nullptr,当前层结束
ans.push_back(cur);
cur.clear();
if(Q.empty()){ //队列已经空了,直接跳出
break;
}else{
Q.push(nullptr); //队列不空,压入层标记nullptr
}
continue;
}
cur.push_back(top->val);
if(top->left){
Q.push(top->left);
}
if(top->right){
Q.push(top->right);
}
}
return ans;
}
};
京公网安备 11010502036488号