Skip to content

Commit 3b1a1f6

Browse files
committed
Solve the problem #103
1 parent dff5b44 commit 3b1a1f6

File tree

4 files changed

+71
-7
lines changed

4 files changed

+71
-7
lines changed

src/main/java/org/sean/tree/AvgLevelResolver.java

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@
55
import java.util.LinkedList;
66
import java.util.List;
77

8+
import static org.sean.utils.MathLib.log2;
9+
810
/***
911
* 637. Average of Levels in Binary Tree
1012
*
@@ -17,10 +19,6 @@
1719
* Output: [3, 14.5, 11]
1820
*/
1921
public class AvgLevelResolver {
20-
public static int log2(int n) {
21-
return (int) (Math.log(n) / Math.log(2));
22-
}
23-
2422
/***
2523
* @see {@link LevelTraversalSolution}
2624
*/

src/main/java/org/sean/tree/LevelTraversalSolution.java

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,16 +4,15 @@
44
import java.util.LinkedList;
55
import java.util.List;
66

7+
import static org.sean.utils.MathLib.log2;
8+
79
/**
810
* Created by Sean on 11/17/16.
911
* <p/>
1012
* Leetcode : 107. Binary Tree Level Order Traversal II
1113
* https://leetcode.com/problems/binary-tree-level-order-traversal-ii/
1214
*/
1315
public class LevelTraversalSolution {
14-
public static int log2(int n) {
15-
return (int) (Math.log(n) / Math.log(2));
16-
}
1716

1817
public List<List<Integer>> levelOrderBottom(TreeNode root) {
1918
List<List<Integer>> resultList = new LinkedList<List<Integer>>();
Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
package org.sean.tree;
2+
3+
import java.util.Arrays;
4+
import java.util.LinkedList;
5+
import java.util.List;
6+
7+
import static org.sean.utils.MathLib.log2;
8+
9+
/***
10+
* 103. Binary Tree Zigzag Level Order Traversal
11+
*/
12+
public class ZigzagTraversal {
13+
14+
public List<List<Integer>> zigzagLevelOrder(TreeNode root) {
15+
List<List<Integer>> resultList = new LinkedList<List<Integer>>();
16+
if (root == null) return resultList;
17+
18+
if (root.left == null && root.right == null) {
19+
List<Integer> list = Arrays.asList(root.val);
20+
resultList.add(list);
21+
return resultList;
22+
}
23+
24+
LinkedList<TreeNode> queue = new LinkedList<>();
25+
LinkedList<Integer> sequences = new LinkedList<>();
26+
27+
queue.add(root);
28+
sequences.add(1);
29+
30+
while (!queue.isEmpty()) {
31+
TreeNode node = queue.pop();
32+
int val = node.val;
33+
int count = sequences.pop();
34+
35+
int index = log2(count);
36+
if (resultList.size() < 1 + index) {
37+
List<Integer> list = new LinkedList<>();
38+
list.add(val);
39+
40+
resultList.add(list);
41+
} else {
42+
// elements order varies for different level
43+
if (index % 2 == 0) resultList.get(index).add(val);
44+
else resultList.get(index).add(0, val);
45+
}
46+
47+
if (node.left != null) {
48+
queue.add(node.left);
49+
sequences.add(2 * count);
50+
}
51+
52+
if (node.right != null) {
53+
queue.add(node.right);
54+
sequences.add(2 * count + 1);
55+
}
56+
}
57+
58+
return resultList;
59+
}
60+
}
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
package org.sean.utils;
2+
3+
public class MathLib {
4+
public static int log2(int n) {
5+
return (int) (Math.log(n) / Math.log(2));
6+
}
7+
}

0 commit comments

Comments
 (0)