JAVA
思路:
1, 从根节点开始,把根节点放在list1中。
2,对这个list1中的节点遍历,分别判断其是否存在左右孩子节点,如果存在,就放在临时list2中。list2是装每一层的孩子节点的,所以在循环里面,每循环一次就new一个。
3,此时的临时list2就是装的当前层的所有孩子节点。
4,把list2 赋值给list1,
5,下次while循环就是判断list1是否是空,空代表没有下一层了。while循环结束,这里的list2只是用来当中间媒介的。

import java.util.*;

/*
 * public class TreeNode {
 *   int val = 0;
 *   TreeNode left = null;
 *   TreeNode right = null;
 * }
 */
//解法一: 数据结构用list,一层层遍历,判断每个节点是否有左右孩子。
//解法二:数据结构用队列。
public class Solution {
    /**
     * 
     * @param root TreeNode类 
     * @return int整型ArrayList<arraylist<>>
     */
    public ArrayList<arraylist<integer>> levelOrder (TreeNode root) {
        // write code here
        ArrayList<arraylist<integer>> resList= new ArrayList<>();
        //必备的空节点判断
        if(root == null) return resList;
        //声明存放每个节点的list
        ArrayList<treenode> nodeList= new ArrayList<>();
        //1,根节点放进去
        nodeList.add(root); 
        //开始对每个节点判断是否有下层节点的操作开始
        while(!nodeList.isEmpty()){
            ArrayList<treenode> tempList= new ArrayList<>();//辅助list用来存每一层的节点
            ArrayList<integer> dataList= new ArrayList<>();//存每个节点的数据
            //2,遍历存放每个节点的list
            for(TreeNode node :nodeList){
                dataList.add(node.val); //当前节点的数值放进去,放的是数值Int
                //3
                if(node.left != null){
                    tempList.add(node.left);
                }
                if(node.right != null) {
                    tempList.add(node.right);
                }
            }
            //4
            nodeList = tempList; 
            resList.add(dataList);//保存每一层的数据
        }
        return resList;
    }


}