题目
给定一个二叉树,返回层序遍历的结果
输入:root = [3,9,20,null,null,15,7]
输出:[[3],[9,20],[15,7]]
原题链接:https://leetcode-cn.com/problems/binary-tree-level-order-traversal/
思路
维护一个队列。第一次只将根节点入队。
然后统计当前队列中的节点数,也就是当前层的节点数,并弹出相应的节点数。将其组合成一个子结果,再加入总的结果当中。
节点出队后,需要把出队后的节点的左右孩子加入队列。
重复上面步骤,直到遍历完成,队列为空。
- 复杂度分析
- 时间复杂度 O(n)。
- 空间复杂度 O(n)。
代码
/**
* 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) {
if (root == NULL) {
return {};
}
vector<vector<int>> results;
queue<TreeNode*> node_queue;
node_queue.push(root);
while(!node_queue.empty()) {
vector<int> result;
int count = node_queue.size();
while (count > 0) {
TreeNode* cur = node_queue.front();
node_queue.pop();
result.push_back(cur->val);
if (cur->left) {
node_queue.push(cur->left);
}
if (cur->right) {
node_queue.push(cur->right);
}
count--;
}
results.push_back(result);
}
return results;
}
};