描述
给定一个节点数为 n 二叉树,要求从上到下按层打印二叉树的 val 值,同一层结点从左至右输出,每一层输出一行,将输出的结果存放到一个二维数组中返回。
例如:
给定的二叉树是{1,2,3,#,#,4,5}
该二叉树多行打印层序遍历的结果是
[ [1], [2,3], [4,5] ]
题解
该题为二叉树的层序遍历问题,不过需要分层,分层区别与不分层的难点在于使用一个队列时需要区分两层的节点,最简单的想法是用两个队列,其中一个队列临时存储当前层的节点。而优化解法只需要一个队列,可以通过一个临时变量存储当前层的节点数,在第k
层入队时只需循环
n
k
n_k
nk次
public class Solution {
ArrayList<ArrayList<Integer>> Print(TreeNode pRoot) {
ArrayList<ArrayList<Integer>> res = new ArrayList<>();
if (pRoot == null)
return res;
Queue<TreeNode> queue = new LinkedList<>();
queue.offer(pRoot);
while (!queue.isEmpty()) {
ArrayList<Integer> tmp = new ArrayList<>();
int num_level = queue.size(); // 当前层的节点数
for (int i = 0; i < num_level; i++) {
TreeNode node = queue.poll();
tmp.add(node.val);
// 添加下一层的节点
if (node.left != null)
queue.add(node.left);
if (node.right != null)
queue.add(node.right);
}
res.add(tmp);
}
return res;
}
}