import java.util.ArrayList; import java.util.LinkedList; import java.util.Queue; import java.util.Collections; /* public class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public TreeNode(int val) { this.val = val; } } */ public class Solution { public ArrayList<ArrayList<Integer> > Print(TreeNode pRoot) { ArrayList<ArrayList<Integer>> res = new ArrayList<>(); if (pRoot == null) { return res; } Queue<TreeNode> queue = new LinkedList<>(); boolean flag = true; queue.add(pRoot); while (!queue.isEmpty()) { Queue<TreeNode> temp = new LinkedList<>(); ArrayList<Integer> arrayList = new ArrayList<>(); while (!queue.isEmpty()) { arrayList.add(queue.peek().val); if (queue.peek().left != null) { temp.add(queue.peek().left); } if (queue.peek().right != null) { temp.add(queue.peek().right); } queue.poll(); } if (!flag) { Collections.reverse(arrayList); } flag = !flag; while (!temp.isEmpty()) { queue.add(temp.poll()); } res.add(arrayList); } return res; } }