题目描述
Given a binary tree, return the zigzag level order traversal of its nodes’ values. (ie, from left to right, then right to left for the next level and alternate between).
For example:
Given binary tree {3,9,20,#,#,15,7},
return its zigzag level order traversal as:
分析
参考LeetCode 102 Binary Tree Level Order Traversal
只需要加入一个变量,判断行数,翻转list即可。
代码
public static List<List<Integer>> zigzagLevelOrder(TreeNode root) {
List<List<Integer>> result = new ArrayList<List<Integer>>();
if (root == null) {
return result;
}
final TreeNode END = new TreeNode(0);
Deque<TreeNode> deque = new LinkedList<TreeNode>();
List<Integer> level = new LinkedList<Integer>();
int count = 0;
deque.add(root);
deque.add(END);
while (!deque.isEmpty()) {
TreeNode p = deque.pop();
if (p == END) {
if (count % 2 == 1) {
Collections.reverse(level);
}
count++;
result.add(new ArrayList<Integer>(level));
level.clear();
if (!deque.isEmpty()) {
deque.add(END);
}
} else {
level.add(p.val);
if (p.left != null) {
deque.add(p.left);
}
if (p.right != null) {
deque.add(p.right);
}
}
}
return result;
}