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,null,null,15,7],
3
/ \
9 20
/ \
15 7
return its zigzag level order traversal as:
[
[3],
[20,9],
[15,7]
]
按层输出二叉树的元素值,而且要zig-zag的顺序,第一层正序,第二层倒序,第三层正序…
思路:
BFS
和102题的区别是加了一个zig-zag的顺序,
而且不能直接把TreeNode用zig-zag的顺序放到queue里,因为那样会影响left, right child的顺序,所以TreeNode的顺序仍然按照BFS的顺序
只是在保存进list的时候,用zig-zag,正序的时候按正常顺序把val加到list末尾,倒序的时候就加到开头
//1ms
public List<List<Integer>> zigzagLevelOrder(TreeNode root) {
List<List<Integer>> result = new ArrayList<List<Integer>>();
if (root == null) {
return result;
}
boolean backward = false;
List<TreeNode> current = new ArrayList<>();
List<TreeNode> next = new ArrayList<>();
current.add(root);
while (!current.isEmpty()) {
List<Integer> tmp = new ArrayList<Integer>();
for (TreeNode node : current) {
if (backward) {
tmp.add(0, node.val);
} else {
tmp.add(node.val);
}
if (node.left != null) {
next.add(node.left);
}
if (node.right != null) {
next.add(node.right);
}
}
current.clear();
result.add(tmp);
List<TreeNode> tmpList = current;
current = next;
next = tmpList;
backward = !backward;
}
return result;
}