题目:
链接:剑指 Offer 32 - II. 从上到下打印二叉树 II;LeetCode 102. 二叉树的层序遍历
难度:简单(剑指 Offer 32.)/中等(LeetCode 102.)
上一题博文:剑指 Offer 32 - I. 从上到下打印二叉树(BFS层序遍历)
下一题博文:剑指 Offer 32 - III. 从上到下打印二叉树 III(BFS层序遍历变形)
从上到下按层打印二叉树,同一层的节点按从左到右的顺序打印,每一层打印到一行。
例如:
给定二叉树: [3,9,20,null,null,15,7],
返回其层次遍历结果:
[
[3],
[9,20],
[15,7]
]
提示:
节点总数 <= 1000
解题思路:
BFS广度优先遍历(二叉树层序遍历)的变形。相比前一题剑指 Offer 32 - I. 从上到下打印二叉树(BFS层序遍历),多了记录层次(深度)的处理,一次遍历一层多个节点。
代码:
/**
* 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;
if(root == nullptr) return ans;
queue<TreeNode*> q;
q.emplace(root);
while(!q.empty()) {
vector<int> temp;
int size = q.size();
while(size--) {
TreeNode* node = q.front();
temp.emplace_back(node->val);
if(node->left != nullptr) q.emplace(node->left);
if(node->right != nullptr) q.emplace(node->right);
q.pop();
}
ans.emplace_back(temp);
}
return ans;
}
};
时间复杂度O(n),空间复杂度O(n)。