102. 二叉树的层序遍历
层序遍历是一种按层次、从左到右依次访问所有节点的算法。其遍历方式与广度优先搜索(BFS)相似,遵循"先进先出"的原则,即先被访问的节点先被处理。由于这种特性与队列的数据结构完全吻合,因此通常采用队列来实现层序遍历。
例如:
输入:root = [3,9,20,null,null,15,7] 输出:[[3],[9,20],[15,7]]
结果是通过层序遍历二叉树得出的。具体过程如下:首先将根节点3入队,然后遍历队列,将当前节点值存入临时数组(用于记录每层结果)。接着将节点3的左右子树依次入队,最后将节点3出队。重复上述过程,直到队列为空,即可得到完整的层序遍历结果。
代码:
class Solution {
public:vector<vector<int>> levelOrder(TreeNode* root) {vector<vector<int>> ans;if (!root) return ans;queue<TreeNode*> q;q.push(root);while (!q.empty()) {vector<int> temp;int n = q.size();for (int i = 0;i < n;i++) {auto cur = q.front();q.pop();temp.push_back(cur->val);if (cur->left) q.push(cur->left);if (cur->right) q.push(cur->right);}ans.emplace_back(temp);}return ans;}
};
时间复杂度:O(n),所有节点最多遍历一次
空间复杂度:O(n),最坏情况下二叉树是满二叉树,将最后一层所有的节点放入临时数组