力扣
非递归解法:
class Node
{
int val;
Node left;
Node right;
public Node(int val)
{
this.val=val;
}
}
class Solution
{
//传入根节点
public static ArrayList levelOrderTraverse(Node root)
{
//最后的结果数组是“数组的数组”形式
//比如:[[1],[2,3],[4,5,6,7]]
ArrayList result=new ArrayList();
if(root==null)
{
return result;
}
//创建队列,队列里装的是结点
Queue queue=new LinkedList();
//将根节点入队列,此时root就是队头结点
queue.offer(root);
//只要队列不为空,就一直循环(开始时队列中有头结点这一个数,队列不为空,进入循环)
while(queue.isEmpty()==false)
{
//统计出此时队列的长度,此时队列的长度是多少,就说明这一层有几个结点,这句话非常非常非常关键
int size=queue.size();
//每一层的节点的值用一个数组来装,装完一层就把这个数组添加到结果数组中
//注意里面装的是结点的值,不是结点
ArrayList temp=new ArrayList();
for(int i=0;i
核心代码就是这一段:
Node current=(Node)queue.poll();
//将刚刚删除的队头结点的值添加到temp数组中
temp.add(current.val);
if(current.left!=null)
{
queue.add(current.left);
}
if(current.right!=null)
{
queue.add(current.right);
}



