从上到下按层打印二叉树,同一层的节点按从左到右的顺序打印,每一层打印到一行。
public class TreeNode {
int val;
TreeNode left;
TreeNode right;
TreeNode(int x) {
val = x;
}
}
public List<List<Integer>> levelOrder2(TreeNode root) {
if (root == null) {
return null;
}
List<List<Integer>> list = new ArrayList<>();
// 用于存储每一行的元素
Queue<TreeNode> queue = new LinkedList<>();
queue.offer(root);
while (!queue.isEmpty()) {
List<Integer> subList = new ArrayList<>();
int count = queue.size();
while (count > 0) {
// 这个减1的操作不能放在最末尾,否则可能会因为当前节点是null导致没有减1
count--;
TreeNode node = queue.poll();
if (node == null) {
continue;
}
subList.add(node.val);
queue.offer(node.left);
queue.offer(node.right);
}
if (subList.size() != 0) {
list.add(subList);
}
}
return list;
}
网友评论