103. Binary Tree Zigzag Level Order Traversal
Given a binary tree, return thezigzag level ordertraversal of its nodes' values. (ie, from left to right, then right to left for the next level and alternate between).
Copy class Solution {
public List < List < Integer >> zigzagLevelOrder ( TreeNode root) {
List < List < Integer >> res = new ArrayList <>();
if (root == null ) {
return res;
}
Queue < TreeNode > queue = new LinkedList <>();
queue . add (root);
boolean reversed = false ;
List < Integer > level = null ;
int depth = 0 ;
while ( ! queue . isEmpty ()) {
int size = queue . size ();
level = new ArrayList <>();
for ( int i = 0 ; i < size; i ++ ) {
TreeNode curNode = queue . remove ();
if (depth % 2 == 0 ) {
level . add ( curNode . val );
}
else {
level . add ( 0 , curNode . val );
}
if ( curNode . left != null ) {
queue . add ( curNode . left );
}
if ( curNode . right != null ) {
queue . add ( curNode . right );
}
}
res . add (level);
++ depth;
}
return res;
}
}
Copy class Solution {
public List < List < Integer >> zigzagLevelOrder ( TreeNode root) {
List < List < Integer >> res = new ArrayList <>();
getZigzagLevelOrderByDFS(root , 0 , res) ;
return res;
}
public void getZigzagLevelOrderByDFS ( TreeNode node , int depth , List < List < Integer >> res) {
if (node == null ) {
return ;
}
if ( res . size () == depth) {
res . add ( new ArrayList <>());
}
if (depth % 2 == 0 ) {
res . get (depth) . add ( node . val );
}
else {
res . get (depth) . add ( 0 , node . val );
}
getZigzagLevelOrderByDFS( node . left , depth + 1 , res) ;
getZigzagLevelOrderByDFS( node . right , depth + 1 , res) ;
}
}
3. Time & Space Complexity