分行从上到下打印二叉树-32-2
从上到下按层打印二叉树,同一层的结点按从左到右的顺序打印,每一层打印到一行。
样例
输入如下图所示二叉树[8, 12, 2, null, null, 6, null, 4, null, null, null]
8
/ \
12 2
/
6
/
4
输出:[[8], [12, 2], [6], [4]]
思路:
非递归:
每一层遍历时,维护一个当前层节点数量的值 size,实现分层打印。
class Solution{
public List<List<Integer>> printFromTopToBottom(TreeNode root) {
List<List<Integer>> res = new ArrayList<>();
if (root == null) return res;
Queue<TreeNode> queue = new LinkedList<>();
queue.add(root);
while (!queue.isEmpty()) {
int size = queue.size();
List<Integer> list = new ArrayList<>();
for (int i = 0; i < size; i++) {
TreeNode node = queue.poll();
list.add(node.val);
if (node.left != null) queue.add(node.left);
if (node.right != null) queue.add(node.right);
}
res.add(list);
}
return res;
}
}
递归:
class Solution {
public List<List<Integer>> printFromTopToBottom(TreeNode root) {
List<List<Integer>> res = new ArrayList<>();
if (root == null) return res;
helper(root, 0, res);
return res;
}
public void helper(TreeNode node, int level, List<List<Integer>> list) {
if(node == null) return;
// start the current level
if (list.size() == level)
list.add(new ArrayList<Integer>());
// fulfil the current level
list.get(level).add(node.val);
// process child nodes for the next level
helper(node.left, level + 1, list);
helper(node.right, level + 1, list);
}
}