题目描述
请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推。
思路分析
相当于从上到下顺序打印的升级版。以层次遍历作为基础,每层打印完成,对奇偶层进行判断,偶数层从右往左打印。
代码实现
public static ArrayList<ArrayList<Integer>> Print(TreeNode pRoot) {
Queue<TreeNode> queue = new LinkedList<>();
ArrayList<ArrayList<Integer>> arrayLists = new ArrayList<ArrayList<Integer>>();
queue.add(pRoot);
//初始变量标记奇偶
int num = 1;
while (!queue.isEmpty()) {
ArrayList<Integer> arrayList = new ArrayList<>();
int count = queue.size();
while (count-- > 0) {
TreeNode node = queue.poll();
if (node == null) {
//arrayList.add(-1);
continue;
}
arrayList.add(node.val);
queue.offer(node.left);
queue.offer(node.right);
}
if (arrayList.size() == 0) {
continue;
}
if (num % 2 == 1) {
arrayLists.add(arrayList);
} else {
ArrayList<Integer> tmp = new ArrayList<>();
for (int i = arrayList.size()-1; i >= 0; i--) {
tmp.add(arrayList.get(i));
}
arrayLists.add(tmp);
}
num++;
}
return arrayLists;
}