题目
题解
import java.util.*;
/*
* public class TreeNode {
* int val = 0;
* TreeNode left = null;
* TreeNode right = null;
* public TreeNode(int val) {
* this.val = val;
* }
* }
*/
public class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param pRoot TreeNode类
* @return int整型ArrayList<ArrayList<>>
*/
public ArrayList<ArrayList<Integer>> Print (TreeNode pRoot) {
// write code here
ArrayList<ArrayList<Integer>> layers = new ArrayList<ArrayList<Integer>>();
if (pRoot == null) {
return layers;
}
ArrayList<Integer> layer = new ArrayList<Integer>();
Queue<TreeNode> queue = new LinkedList<TreeNode>();
// Initialize first node
layer.add(pRoot.val);
layers.add(layer);
queue.offer(pRoot);
boolean reverse = false;
while (!queue.isEmpty()) {
// Reverse flag
reverse = !reverse;
layer = new ArrayList<Integer>();
Stack<Integer> stack = new Stack<Integer>();
int size = queue.size();
for (int i = 0; i < size; i++) {
TreeNode node = queue.poll();
// Loop for `node.left` and `node.right`
for (int j = 0; j < 2; j++) {
TreeNode current = j < 1 ? node.left : node.right;
if (current != null) {
// System.out.println(
// node.val + (j < 1 ? ".left = " : ".right = ") + current.val
// );
if (!reverse) {
// Append to result in ascending order
layer.add(current.val);
} else {
// Reverse order for current layer
stack.push(current.val);
}
// Add node to queue for next layer
queue.offer(current);
}
}
}
// Reverse needed for the current layer
while (!stack.isEmpty()) {
layer.add(stack.pop());
}
if (layer.size() > 0) {
layers.add(layer);
}
}
return layers;
}
}