题目描述
从上到下按层打印二叉树,同一层结点从左至右输出。每一层输出一行。
思路分析
1、初始化一个队列,初始元素为root
2、遍历元素,每次首先获取当前队列的节点个数,即当前队列的size
3、弹出size次元素,则本次遍历到的均为本层的元素
4、每次弹出元素的同时,把元素的左右孩子加入队列,以便下次遍历
解释说明:
ArrayList<ArrayList<Integer>> Print(TreeNode pRoot) {
ArrayList<ArrayList<Integer>> ret = new ArrayList<>();
Queue<TreeNode> queue = new LinkedList<>();
queue.add(pRoot);
while (!queue.isEmpty()) {
// 当前层的节点值,按照应该打印的顺序添加到列表中
ArrayList<Integer> list = new ArrayList<>();
// 当前层的节点数量
int cnt = queue.size();
while (cnt-- > 0) {
// 弹出本层元素
TreeNode node = queue.poll();
if (node == null)
continue;
list.add(node.val);
// 添加左右孩子节点到队列
queue.add(node.left);
queue.add(node.right);
}
if (list.size() != 0)
// 当前行元素遍历的列表加入res
ret.add(list);
}
return ret;
}