题目:从上到下打印出二叉树的每个节点,同一层的节点按照从左到右的顺序打印。
解题思路:层级遍历常用队列,从左向右,如果一个节点有左或者右孩子,则将左右孩子存放在队列中
1.如果root为空,则返回空数组;
2.创建一个队列queue,用于存放节点;一个ArrayList用于存放遍历过的节点的值
3.首先将root放入队列,
4.循环,当队列不为空时,
首先求当前队列中元素的个数(也就是当前层节点的个数),分别从队列中出队,存放在ArrayList中,然后再判断当前节点的左右孩子是否为空,不为空则入队
5.将ArrayList转化为Array() ,并返回
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
class Solution {
public int[] levelOrder(TreeNode root) {
// //层级遍历
// if(root==null){
// return new int[0];
// }
// ArrayList<Integer> list=new ArrayList<>();
// Queue<TreeNode> queue=new LinkedList<>();
// queue.add(root);
// list.add(root.val);
// while(!queue.isEmpty()){
// root=queue.poll();
// if(root.left!=null){
// list.add(root.left.val);
// queue.add(root.left);
// }
// if(root.right!=null){
// list.add(root.right.val);
// queue.add(root.right);
// }
// }
// int[] res=new int[list.size()];
// for(int i=0;i<list.size();i++){
// res[i]=list.get(i);
// }
// return res;
//层级遍历
if(root==null){
return new int[0];
}
ArrayList<Integer> list=new ArrayList<>();
Queue<TreeNode> queue=new LinkedList<>();
queue.add(root);
while(!queue.isEmpty()){
int levelnum=queue.size();
for(int i=0;i<levelnum;i++){
root=queue.poll();
list.add(root.val);
if(root.left!=null){
queue.add(root.left);
}
if(root.right!=null){
queue.add(root.right);
}
}
}
int[] res=new int[list.size()];
for(int i=0;i<list.size();i++){
res[i]=list.get(i);
}
return res;
}
}