直接广度遍历,使用LinkedList的头插法和尾插法,处理不同层
按之字形顺序打印二叉树
http://www.nowcoder.com/questionTerminal/91b69814117f4e8097390d107d2efbe0
public ArrayList<ArrayList<Integer>> Print(TreeNode pRoot) { ArrayList<ArrayList<Integer>> list = new ArrayList<>(); if (pRoot==null) return list; LinkedList<TreeNode> queue = new LinkedList<>(); queue.add(pRoot); int flag=0; while (!queue.isEmpty()){ ArrayList<Integer> path = new ArrayList<>(); //某层的节点个数 int size = queue.size(); for (int i=0;i<size;i++){ TreeNode node = queue.removeFirst(); if (flag%2==0) path.add(path.size(),node.val); else path.add(0,node.val); if (node.left!=null) queue.add(node.left); if (node.right!=null) queue.add(node.right); } flag++; list.add(path); } return list; }