
2. 分析
- 从题目可以看出这是要将节点分层输出
- 宽度优先搜索要注意的几个点: 在递归式或者迭代式决定分层的,结束条件是什么。
- 这道题其实要求输出所有的节点,而且没有别的附加条件,只有按层输出,考虑到宽度优先中只有上一层完全搜索过之后,这一层才能搜索,也就是我们的数据结构中,到达新的一层时不能存储有上一层的。所以FCFS的队列合适:在搜索一个节点的时候, 将这个节点弹出并且将他的子节点加入队列。
- 很多要求按层遍历宽度优先树,并且在“层”层面上的操作都可以有这种数据结构,比如在层层面上求平均, 找出有一定规律的第n小的数等等。
3.代码
class Solution {
public:
vector<vector<int>> levelOrder(TreeNode* root) {
vector<vector<int> > ans;
if (!root)
return ans;
queue<TreeNode* > q;
int depth = 0;
vector<int> temp;
q.push(root);
while(!q.empty()){
int len = q.size();
temp.clear();
for (int i = 0; i < len; i++){
TreeNode* t = q.front();
q.pop();
if (t->left) q.push(t->left);
if (t->right) q.push(t->right);
temp.push_back(t->val);
}
ans.push_back(temp);
}
return ans;
}
};