题目:从上往下打印出二叉树的每个节点,同层节点从左至右打印。
解析:
1.所有节点全部放入一个List中
①创建队列Queue,开始将根节点add进队里中;
②取出队列中的结点,将该节点加入List中;
③再将该节点的左、右结点add进Queue队列中;
④循环②③步骤,直到Queue队列为空,所有节点全部被添加进List中;
public ArrayList<Integer> PrintFromTopToBottom(TreeNode root){
ArrayList<Integer> list = new ArrayList<Integer>();
Queue<TreeNode> queue = new LinkedList<TreeNode>();
queue.add(root);//根节点入队列
while ( !queue.isEmpty()){
TreeNode node = queue.poll();//取出队列的头部结点元素
if (node.left != null){
queue.add(node.left);//向队列尾部加入取出结点的左节点
}
if (node.right != null){
queue.add(node.right);//向队列尾部加入取出结点的右节点
}
list.add(node.val);
}
return list;
}
2.将每一层结点放入一个List当中
①创建队列Queue,将根节点放入Queue中;
②获取当前Queue队列的元素个数size;
③将队列Queue中的size个元素出队列,将这size个元素具有的左右结点压入队列Queue中同时将这size个元素加入新建的List中。
④循环步骤②③,直到队列为空;
public List<List<Integer>> levelOrder(TreeNode root) {
List<List<Integer>> list = new ArrayList<List<Integer>>();
if (root == null) return list;
Queue<TreeNode> queue = new LinkedList<TreeNode>();
queue.add(root);
while ( ! queue.isEmpty()){
List<Integer> list0 = new ArrayList<Integer>();
int size = queue.size();//每一层的结点个数
//将当前层的结点弹出,并加入list0中,同时下一层的结点压入队列中,
while (size > 0){
TreeNode node = queue.poll();//队列头弹出
if (node.left != null){
queue.add(node.left);
}
if (node.right != null){
queue.add(node.right);
}
list0.add(node.val);
size--;
}
list.add(list0);
}
return list;
}