二叉树的层序遍历
给你一个二叉树,请你返回其按 层序遍历 得到的节点值。 (即逐层地,从左到右访问所有节点)。
示例:
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/binary-tree-level-order-traversal
BFS:
(1)将第一层的节点保存在队列中,记录队列长度
(2)弹出队列长度的元素并保存在ins中,同时把下一层的节点加入队列中
(3)将ins添加到res容器中,清空ins
(4)到达最底层,队列为空,返回res即可
class Solution {
public:
vector<vector<int>> levelOrder(TreeNode* root) {
vector<vector<int>>res;
if(!root) return res;
vector<int>ins;
queue<TreeNode*>q;
q.push(root);
while (!q.empty()) {//判断队列是否有元素
int n = q.size();//队列的长度会变,所以要提前记录好
for (int i = 0; i < n; i++) {
TreeNode* p = q.front();//队列头元素
q.pop();//弹出头元素
if (p == nullptr) return res;
ins.emplace_back(p->val);//压入容器中,储存每层的节点
if (p->left) q.push(p->left);将下一层的节点入队
if (p->right) q.push(p->right);
}
res.emplace_back(ins);
ins.clear();
}
return res;
}
};
复杂度分析
时间复杂度:O(n)
空间复杂度:O(n)