题目描述
从上到下按层打印二叉树,同一层结点从左至右输出。每一层输出一行。
示例1
输入
{8,6,10,5,7,9,11}
返回值
[[8],[6,10],[5,7,9,11]]
核心代码实现
import java.util.*;
/*
public class TreeNode {
int val = 0;
TreeNode left = null;
TreeNode right = null;
public TreeNode(int val) {
this.val = val;
}
}
*/
//借助队列,先将根节点入队,每次出队一个元素,并将该出队元素的左右孩子节点均加入队列中,直到队列为空
public class Solution {
ArrayList<ArrayList<Integer> > Print(TreeNode pRoot) {
ArrayList<ArrayList<Integer> > result = new ArrayList<ArrayList<Integer> >();
if(pRoot == null){
return result;
}
LinkedList<TreeNode> queue = new LinkedList<TreeNode>();
queue.offer(pRoot); //首先将根节点入队
ArrayList<Integer> list;
while(!queue.isEmpty()){
list = new ArrayList<Integer>(); //list记录每层的元素
int qSize = queue.size();
while(qSize > 0){
TreeNode node = queue.poll(); //每次出队一个元素
list.add(node.val);
if(node.left != null){
queue.add(node.left); //出队元素的左孩子非空,则将其左孩子入队
}
if(node.right != null){
queue.add(node.right); //出队元素的右孩子非空,则将其右孩子入队
}
qSize--;
}
if(!list.isEmpty()){
result.add(list);
}
}
return result;
}
}