/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
class Solution {
public List<List<Integer>> levelOrder(TreeNode root) {
List<List<Integer>> res = new LinkedList<List<Integer>>();
if (root == null) {
return res;
}
int direction = 1;
LinkedList<TreeNode> up = new LinkedList<TreeNode>();
up.offer(root);
while (!up.isEmpty()) {
LinkedList<TreeNode> down = new LinkedList<TreeNode>();
List<Integer> temp = new LinkedList<Integer>();
int size = up.size();
if (direction % 2 == 1) { // 从左到右
for (int i = 0; i < size; i++) {
TreeNode cur = up.get(i);
temp.add(cur.val);
}
} else { // 从右到左
for (int i = size - 1; i >= 0; i--) {
TreeNode cur = up.get(i);
temp.add(cur.val);
}
}
res.add(temp);
for (int i = 0; i < size; i++) {
TreeNode cur = up.poll();
if (cur.left != null) {
down.offer(cur.left);
}
if (cur.right != null) {
down.offer(cur.right);
}
}
up = down;
direction++;
}
return res;
}
}
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
class Solution {
public List<List<Integer>> levelOrder(TreeNode root) {
List<List<Integer>> res = new LinkedList<List<Integer>>();
if (root == null) {
return res;
}
boolean flag = true;
Deque<TreeNode> deque = new LinkedList<TreeNode>();
deque.offerFirst(root);
while (!deque.isEmpty()) {
List<Integer> temp = new LinkedList<Integer>();
int size = deque.size();
for ( ; size > 0; size--) {
if (flag) {
TreeNode node = deque.pollFirst();
temp.add(node.val);
if (node.left != null) {
deque.offerLast(node.left);
}
if (node.right != null) {
deque.offerLast(node.right);
}
} else {
TreeNode node = deque.pollLast();
temp.add(node.val);
if (node.right != null) {
deque.offerFirst(node.right);
}
if (node.left != null) {
deque.offerFirst(node.left);
}
}
}
flag = !flag;
res.add(temp);
}
return res;
}
}