每日一练:二叉树的层序遍历
102. 二叉树的层序遍历 - 力扣(LeetCode)
一、题目要求
给你二叉树的根节点 root
,返回其节点值的 层序遍历 。 (即逐层地,从左到右访问所有节点)。
示例 1:
输入:root = [3,9,20,null,null,15,7] 输出:[[3],[9,20],[15,7]]
示例 2:
输入:root = [1] 输出:[[1]]
示例 3:
输入:root = [] 输出:[]
提示:
- 树中节点数目在范围
[0, 2000]
内 -1000 <= Node.val <= 1000
二、解法1-队列 O(N)
队列是一种先进先出的容器,本题需要使用两个队列,q1用来操作当前层的节点,节点存在就把值放到ret中,然后把这个节点的左右节点按顺序放在q2中,该节点出队列;节点为空就直接出队列,操作下一个节点。
class Solution {
public:vector<vector<int>> levelOrder(TreeNode* root) {vector<vector<int>> ret;queue<TreeNode*> q1;queue<TreeNode*> q2;q2.push(root);while (!q2.empty()) {swap(q1,q2); // q1得到下一层节点queue<TreeNode*>().swap(q2); // 清空q2,存放下下层节点vector<int> level; // 存放这一层节点的值while (!q1.empty()) {if (q1.front()) {level.push_back(q1.front()->val);q2.push(q1.front()->left);q2.push(q1.front()->right);}q1.pop();}if (!level.empty())ret.push_back(level);}return ret;}
};