leetcode 103.
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] ]
Solution. A naive solution is to use BFS level order traversal. But the code is a bit overhead. However, there is a smart DFS solution. It checks the level. If it adds into result in sequential or reverse order based on level % 2.
This technique can also be used to solve problem likeĀ Binary Tree Level Order Traversal II
// DFS solution. Initial root level is 0. // if level % 2 == 0, sequential order // if level % 2 == 1, reverse order public List<List<Integer>> zigzagLevelOrder(TreeNode root) { List<List<Integer>> ans = new ArrayList<>(); zigzagHelper(root, ans, 0); return ans; } private void zigzagHelper(TreeNode root, List<List<Integer>> ans, int level) { if (root == null) { return; } if (level >= ans.size()) { ans.add(new LinkedList<>()); } LinkedList<Integer> curr = (LinkedList)ans.get(level); if (level % 2 == 0) { curr.addLast(root.val); } else { curr.addFirst(root.val); } zigzagHelper(root.left, ans, level + 1); zigzagHelper(root.right, ans, level + 1); }
Check my code on github.