Binary Tree Zigzag Level Order Traversal
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}
,
3 / \ 9 20 / \ 15 7
return its zigzag level order traversal as:
[ [3], [20,9], [15,7] ]
public class Solution { public List<List<Integer>> zigzagLevelOrder(TreeNode root) { List<List<Integer>> res = new LinkedList<List<Integer>>(); Queue<TreeNode> queue = new LinkedList<TreeNode>(); if(root==null) return res; queue.add(root); Boolean flag = true; while(!queue.isEmpty()) { int levelnum = queue.size(); ArrayList<Integer> sublist = new ArrayList<Integer>(); for(int i=0; i<levelnum;i++) { TreeNode node = queue.poll(); if(node.left!=null) queue.add(node.left); if(node.right!=null) queue.add(node.right); sublist.add(node.val); } if(flag == true) { res.add(sublist); flag = false; } else { res.add(reverse(sublist)); flag = true; } } return res; }
//reverse ArrayList public ArrayList<Integer> reverse(ArrayList<Integer> list) { for(int i = 0, j = list.size() - 1; i < j; i++) { list.add(i, list.remove(j)); } return list; } }