public static List<List<Integer>> levelOrder(TreeNode root) {//TLE
        if (root == null) return null;
        List<List<Integer>> lli = new ArrayList<List<Integer>>();
        List<Integer> temp = new ArrayList<Integer>();
        List<TreeNode> ltn0 = new ArrayList<TreeNode>();
        List<TreeNode> ltn1 = new ArrayList<TreeNode>();
        List<TreeNode> ltn_curr = ltn0;
        List<TreeNode> ltn_child = ltn1;
        ltn_curr.add(root);
        while (ltn_curr.isEmpty() == false) {
        	ltn_child.clear();
        	for (TreeNode tn : ltn_curr) {
            	temp.add(tn.val);
            	if (tn.left != null) ltn_child.add(tn.left);
            	if (tn.right != null) ltn_child.add(tn.right);
            }
        	lli.add(temp);
        	if (ltn_curr == ltn0) {
        		ltn_curr = ltn1;
        		ltn_child = ltn0;
        		ltn_child.clear();
        	}
        	else if (ltn_curr == ltn1) {
        		ltn_curr = ltn0;
        		ltn_child = ltn1;
        		ltn_child.clear();
        	}
        }
        return lli;
    }