题解 | #按之字形顺序打印二叉树#
按之字形顺序打印二叉树
http://www.nowcoder.com/practice/91b69814117f4e8097390d107d2efbe0
用一个map先实现层序遍历,结合LinkedList去实现之字形的存贮数据;
HashMap<Integer, LinkedList<Integer>> map; public ArrayList<ArrayList<Integer>> Print(TreeNode pRoot) { map = new HashMap<Integer, LinkedList<Integer>>(); pre(0, pRoot); ArrayList<ArrayList<Integer>> ans = new ArrayList<>();//结果封装 for (Map.Entry<Integer, LinkedList<Integer>> tm : map.entrySet()) { ArrayList<Integer> list = new ArrayList<Integer>(tm.getValue()); ans.add(list); } return ans; } private void pre(int i, TreeNode pRoot) { if (pRoot == null) return; if (!map.containsKey(i)) { LinkedList<Integer> temp = new LinkedList<>(); temp.add(pRoot.val); map.put(i, temp); } else { if (i % 2 == 1) {//相隔两层的添加元素顺序刚好相反 map.get(i).addFirst(pRoot.val); } else { map.get(i).addLast(pRoot.val); } } if (pRoot.left != null) { pre(i + 1, pRoot.left); } if (pRoot.right != null) { pre(i + 1, pRoot.right); } }