题目描述
请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推。
import java.util.ArrayList;
import java.util.Deque;
import java.util.Iterator;
import java.util.LinkedList;
//类似层次遍历,加个判断条件,奇数层正序遍历,偶数层倒序遍历队列。
public class 按之字形打印二叉树 {
public ArrayList<ArrayList<Integer> > Print(TreeNode pRoot) {
ArrayList<ArrayList<Integer>>layers=new ArrayList<>();
if(pRoot==null) return layers;
Deque<TreeNode>queue=new LinkedList<TreeNode>();
queue.offer(pRoot);
int depth=0;
while (!queue.isEmpty()) {
depth++;
ArrayList<Integer>layer=new ArrayList<>();
int cur=0;
int leversize=queue.size();
if ((depth&1)==0) {//偶数层
Iterator<TreeNode>it= queue.descendingIterator();
while (it.hasNext()) {
layer.add(it.next().val);
}
} else {
Iterator<TreeNode>it=queue.iterator();
while (it.hasNext()) {
layer.add(it.next().val);
}
}
while (cur<leversize) {
TreeNode node = queue.poll();
if (node.left != null) {
queue.offer(node.left);
}
if (node.right != null) {
queue.offer(node.right);
}
cur ++;
}
layers.add(layer);
}
return layers;
}
}