binary tree zigzag level order traversal


一层一层的搜索。
先下一层的元素保存下来。
然后在用一个boolean控制当前这层的输出顺序。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
public List<List<Integer>> zigzagLevelOrder(TreeNode root) {
List<List<Integer>> ans = new ArrayList<List<Integer>>();
if (root == null)
return ans;
List<TreeNode> parents = new LinkedList<TreeNode>();
parents.add(root);
boolean right = true;
while (parents.isEmpty() == false) {
List<TreeNode> children = new LinkedList<TreeNode>();
for (int i = 0 ; i < parents.size(); ++i) {
root = parents.get(i);
if (root.left != null)
children.add(root.left);
if (root.right != null)
children.add(root.right);
}
List<Integer> temp = new ArrayList<Integer>();
if (right) {
for (int i = 0; i < parents.size(); ++i) {
temp.add(parents.get(i).val);
}
} else {
for (int i = parents.size() - 1; i >= 0; --i) {
temp.add(parents.get(i).val);
}
}
right = !right;
ans.add(temp);
parents = children;
}
return ans;
}