给你一个二叉树,请你返回其按层序遍历得到的节点值。 (即逐层地,从左到右访问所有节点)。
解题思路:
首先我们需要了解什么是层序遍历。如下图:
将二叉树按照层进行划分,依次从左至右输出每一层的节点即可。我们可以利用队列进行模拟。
具体代码:
class Solution {
public List<List<Integer>> levelOrder(TreeNode root) {
// 1. 保存最后的结果
List<List<Integer>> ans = new ArrayList<List<Integer>>();
// 2. 利用队列进行模拟
Queue<TreeNode> queue = new ArrayDeque<>();
// 3. 首先将根节点放入队列中
if(root != null) {
queue.add(root);
}
// 4. 依次从队列中取出节点,同时将该节点的左右节点放入队列中
while(!queue.isEmpty()) {
// 5. 获取这层的节点个数
int n = queue.size();
// 6. 通过list保存每一层的节点数据
List<Integer> list = new ArrayList<>();
// 7. 依次从队列中取出节点,同时将该节点的左右节点放入队列中
for(int i = 0; i < n; i++) {
TreeNode curNode = queue.poll();
list.add(curNode.val);
if (curNode.left != null) {
queue.add(curNode.left);
}
if (curNode.right != null) {
queue.add(curNode.right);
}
}
// 8. 保存结果
ans.add(list);
}
return ans;
}
}
时间复杂度:O(n)。
空间复杂度:O(n)。