题目描述

题解
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val
* TreeNode left
* TreeNode right
* TreeNode() {}
* TreeNode(int val) { this.val = val
* TreeNode(int val, TreeNode left, TreeNode right) {
* this.val = val
* this.left = left
* this.right = right
* }
* }
*/
// 本题跟【剑指offer】32.2 从上到下打印二叉树2 一模一样
// 辅助队列法
// 执行用时:1 ms, 在所有 Java 提交中击败了94.79%的用户
// 内存消耗:38.6 MB, 在所有 Java 提交中击败了63.91%的用户
class Solution {
public List<List<Integer>> levelOrder(TreeNode root) {
List<List<Integer>> res = new ArrayList<>()
if (root == null)
return res
Queue<TreeNode> q_next = new LinkedList<>()
Queue<TreeNode> q_cur = new LinkedList<>()
q_next.add(root)
while (!q_next.isEmpty()) {
while (!q_next.isEmpty()) {
TreeNode temp = q_next.remove()
q_cur.add(temp)
}
List<Integer> level = new ArrayList<>()
while (!q_cur.isEmpty()) {
TreeNode cur = q_cur.remove()
level.add(cur.val)
if (cur.left != null)
q_next.add(cur.left)
if (cur.right != null)
q_next.add(cur.right)
}
res.add(level)
}
return res
}
}
// 辅助计数法;
// 执行用时:1 ms, 在所有 Java 提交中击败了94.79%的用户
// 内存消耗:38.6 MB, 在所有 Java 提交中击败了71.54%的用户
class Solution {
public List<List<Integer>> levelOrder(TreeNode root) {
List<List<Integer>> res = new ArrayList<>()
if (root == null)
return res
Queue<TreeNode> q = new LinkedList<>()
q.add(root)
while (!q.isEmpty()) {
int count = q.size()
List<Integer> level = new ArrayList<>()
while (count > 0) {
TreeNode node = q.remove()
level.add(node.val)
if (node.left != null)
q.add(node.left)
if (node.right != null)
q.add(node.right)
count--
}
res.add(level)
}
return res
}
}