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]
]
Java Code:
public static ArrayList<ArrayList<Integer>> zigzagLevelOrder(TreeNode root) { ArrayList<ArrayList<Integer>> results = new ArrayList<ArrayList<Integer>> (); ArrayList<TreeNode> tmpQ = new ArrayList<TreeNode> (); int i = 0; if(root != null) tmpQ.add(root); while ( !tmpQ.isEmpty() ) { ArrayList<Integer> tmpresult = new ArrayList<Integer> (); int length = tmpQ.size(); int count = 0; for (int z = 0; z < length; z++) tmpresult.add(tmpQ.get(z).val); while( count < length) { TreeNode tmp = tmpQ.get(length - 1 - count); tmpQ.remove(length-1-count); count++; if (i%2 == 0) { if(tmp.right != null) tmpQ.add(tmp.right); if(tmp.left != null) tmpQ.add(tmp.left); } else { if(tmp.left != null) tmpQ.add(tmp.left); if(tmp.right != null) tmpQ.add(tmp.right); } } results.add(tmpresult); i++; } return results; }
No comments:
Post a Comment