按之字形顺序打印二叉树
按之字形顺序打印二叉树
http://www.nowcoder.com/questionTerminal/91b69814117f4e8097390d107d2efbe0
public class Solution {
public ArrayList<ArrayList<Integer> > Print(TreeNode pRoot) {
ArrayList<ArrayList<Integer> > result = new ArrayList<>();
if (pRoot == null) {
return result;
}
// 开辟一个双端队列,方便后面操作
Deque<TreeNode>queue = new LinkedList<>();
// odd为true是奇数行
boolean odd = true;
queue.addFirst(pRoot);
while (!queue.isEmpty()) {
ArrayList<Integer> array = new ArrayList<>();
int size = queue.size();
// 单数行
if (odd) {
for (int i=0; i<size; ++i) {
// 从队列开头取结点
TreeNode node = queue.pollFirst();
array.add(node.val);
// 下一行是从右往左
// 所以左结点先addLast,最终会在队列开头
if (node.left != null) {
queue.addLast(node.left);
}
if (node.right != null) {
queue.addLast(node.right);
}
}
} else {
// 双数行
for (int i=0; i<size; ++i) {
// 从队列末尾取结点
TreeNode node = queue.pollLast();
array.add(node.val);
// 下一行是从左往右
// 所以右结点先addFirst,最终会在队列末尾
if (node.right != null) {
queue.addFirst(node.right);
}
if (node.left != null) {
queue.addFirst(node.left);
}
}
}
result.add(array);
// 下一行反过来
odd = !odd;
}
return result;
}