思路:
本题考查最基本的二叉树层序遍历算法,DFS广度优先搜索,利用队列实现。
学习到队列的c++表示,还有层序遍历的算法,一维和二维容器的使用。
tips:入队前都判空,可以省去很多pop语句,简便很多。
具体代码注释如下:
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode() : val(0), left(nullptr), right(nullptr) {}
* TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
* TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
* };
*/
class Solution {
public:
vector<vector<int>> levelOrder(TreeNode* root) {
vector<vector<int>> ans;//答案二维容器
queue<TreeNode*> q;//队列里存放二叉树结点
if(root)q.push(root);//非空则入队根节点
while(!q.empty()){//队列非空
vector<int>ret;
int size=q.size();//注意要记录队列size,否则后面出队后动态变化就出错
for(int i=0;i<size;i++){//循环放入本层结点数值
TreeNode*cur=q.front();//队首结点
q.pop();//出队
if(cur){ret.push_back(cur->val);}//非空放入一维容器
if(cur->left){q.push(cur->left);}//左右非空则入队等待
if(cur->right){q.push(cur->right);}
}
ans.push_back(ret);//一维容器放入二维答案容器
}
return ans;
}
};