Skip to content

Commit f04f4bf

Browse files
author
freemanzhang
committed
init impl
1 parent 68e21e5 commit f04f4bf

File tree

1 file changed

+101
-88
lines changed

1 file changed

+101
-88
lines changed
Lines changed: 101 additions & 88 deletions
Original file line numberDiff line numberDiff line change
@@ -1,88 +1,101 @@
1-
package linkedIn;
2-
3-
import java.util.ArrayList;
4-
import java.util.LinkedList;
5-
import java.util.List;
6-
import java.util.Stack;
7-
8-
import org.junit.Test;
9-
10-
import utility.TreeNode;
11-
12-
/**
13-
*
14-
*/
15-
16-
public class BinaryTreeZigzagLevelOrderTraversal
17-
{
18-
@Test
19-
public void test()
20-
{
21-
TreeNode root = new TreeNode(3);
22-
TreeNode node1 = new TreeNode(9);
23-
TreeNode node2 = new TreeNode(20);
24-
TreeNode node3 = new TreeNode(15);
25-
TreeNode node4 = new TreeNode(7);
26-
root.left = node1;
27-
root.right = node2;
28-
node2.left = node3;
29-
node2.right = node4;
30-
System.out.println( zigzagLevelOrder( root ) );
31-
}
32-
33-
public List<List<Integer>> zigzagLevelOrder( TreeNode root )
34-
{
35-
List<List<Integer>> allLevels = new ArrayList<>();
36-
if ( root == null )
37-
{
38-
return allLevels;
39-
}
40-
41-
Stack<TreeNode> oddLevelStack = new Stack<>();
42-
Stack<TreeNode> evenLevelStack = new Stack<>();
43-
oddLevelStack.push( root );
44-
45-
while ( !oddLevelStack.isEmpty()
46-
|| !evenLevelStack.isEmpty() )
47-
{
48-
List<Integer> oneLevel = new LinkedList<>();
49-
// odd layer, push right child first, left child last
50-
if ( !oddLevelStack.isEmpty() )
51-
{
52-
while ( !oddLevelStack.isEmpty() )
53-
{
54-
TreeNode stackTop = oddLevelStack.pop();
55-
oneLevel.add( stackTop.val );
56-
if ( stackTop.left != null )
57-
{
58-
evenLevelStack.push( stackTop.left );
59-
}
60-
if ( stackTop.right != null )
61-
{
62-
evenLevelStack.push( stackTop.right );
63-
}
64-
}
65-
}
66-
// even layer, push left child first, right child last
67-
else
68-
{
69-
while ( !evenLevelStack.isEmpty() )
70-
{
71-
TreeNode stackTop = evenLevelStack.pop();
72-
oneLevel.add( stackTop.val );
73-
if ( stackTop.right != null )
74-
{
75-
oddLevelStack.push( stackTop.right );
76-
}
77-
if ( stackTop.left != null )
78-
{
79-
oddLevelStack.push( stackTop.left );
80-
}
81-
}
82-
}
83-
allLevels.add( oneLevel );
84-
}
85-
return allLevels;
86-
}
87-
88-
}
1+
package linkedIn;
2+
3+
import java.util.ArrayList;
4+
import java.util.LinkedList;
5+
import java.util.List;
6+
import java.util.Stack;
7+
8+
import org.junit.Test;
9+
10+
import utility.TreeNode;
11+
12+
/**
13+
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).
14+
15+
For example:
16+
Given binary tree [3,9,20,null,null,15,7],
17+
3
18+
/ \
19+
9 20
20+
/ \
21+
15 7
22+
return its zigzag level order traversal as:
23+
[
24+
[3],
25+
[20,9],
26+
[15,7]
27+
]
28+
*/
29+
30+
public class BinaryTreeZigzagLevelOrderTraversal
31+
{
32+
@Test
33+
public void test()
34+
{
35+
TreeNode root = new TreeNode(3);
36+
TreeNode node1 = new TreeNode(9);
37+
TreeNode node2 = new TreeNode(20);
38+
TreeNode node3 = new TreeNode(15);
39+
TreeNode node4 = new TreeNode(7);
40+
root.left = node1;
41+
root.right = node2;
42+
node2.left = node3;
43+
node2.right = node4;
44+
System.out.println( zigzagLevelOrder( root ) );
45+
}
46+
47+
public List<List<Integer>> zigzagLevelOrder( TreeNode root )
48+
{
49+
List<List<Integer>> result = new ArrayList<>();
50+
if ( root == null )
51+
{
52+
return result;
53+
}
54+
55+
Stack<TreeNode> currLayer = new Stack<>();
56+
currLayer.push( root );
57+
Stack<TreeNode> nextLayer = new Stack<>();
58+
List<Integer> layerOutput = new ArrayList<>();
59+
int direction = 0;
60+
61+
while ( !currLayer.isEmpty() )
62+
{
63+
TreeNode node = currLayer.pop();
64+
layerOutput.add( node.val );
65+
if ( direction == 0 )
66+
{
67+
if ( node.left != null )
68+
{
69+
nextLayer.push( node.left );
70+
}
71+
if ( node.right != null )
72+
{
73+
nextLayer.push( node.right );
74+
}
75+
}
76+
else
77+
{
78+
if ( node.right != null )
79+
{
80+
nextLayer.push( node.right );
81+
}
82+
if ( node.left != null )
83+
{
84+
nextLayer.push( node.left );
85+
}
86+
}
87+
88+
if ( currLayer.isEmpty() )
89+
{
90+
result.add( layerOutput );
91+
layerOutput = new ArrayList<>();
92+
currLayer = nextLayer;
93+
nextLayer = new Stack<>();
94+
95+
direction ^= 1;
96+
}
97+
}
98+
return result;
99+
}
100+
101+
}

0 commit comments

Comments
 (0)