版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/jsszwc/article/details/87951826
题目:
https://leetcode-cn.com/problems/binary-tree-level-order-traversal/
题意:
给定一个二叉树,返回其按层次遍历的节点值。 (即逐层地,从左到右访问所有节点)。
思路:
层次遍历,可以通过依次入队出队实现,也就是用一个队列即可,如何区分不同层?可以发现队列中任何时候所有节点也只能属于两层,不能更多层了。所以用两个变量 和 , 记录队列中当前层节点的个数, 记录队列中下一层节点的个数,当 时,把遍历到的节点组装成一个 ,就是当前层的所有节点。然后更新 和 ,遍历下一层,循环往复
代码:
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
vector<vector<int>> levelOrder(TreeNode* root) {
vector<vector<int>> ans;
vector<int> temp;
if(root == nullptr) {
return ans;
}
queue<TreeNode*> que;
int cur = 0, nex = 0;
que.emplace(root);
cur++;
while(!que.empty()) {
TreeNode* p = que.front(); que.pop();
temp.emplace_back(p->val);
cur--;
if(p->left) {
que.emplace(p->left);
nex++;
}
if(p->right) {
que.emplace(p->right);
nex++;
}
if(cur == 0) {
swap(cur, nex);
ans.emplace_back(temp);
temp.clear();
}
}
return ans;
}
};