题解 | #按之字形顺序打印二叉树#
按之字形顺序打印二叉树
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);
}
}
