Skip to content

Commit 8d09394

Browse files
committed
Added GrokkingBreadthFirstSearch and updated tester method.
1 parent 443c93d commit 8d09394

File tree

2 files changed

+144
-0
lines changed

2 files changed

+144
-0
lines changed

GrokkingBreadthFirstSearch.java

Lines changed: 109 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,109 @@
1+
package com.cunningdj.grokJava;
2+
3+
import java.util.List;
4+
import java.util.ArrayList;
5+
import java.util.Deque;
6+
import java.util.LinkedList;
7+
import java.util.Arrays;
8+
9+
class GrokkingBreadthFirstSearch {
10+
public static void main(String[] args) {
11+
Tester tester = new Tester();
12+
String testTitle="";
13+
14+
// LEVEL_VALUES
15+
testTitle = "LEVEL_VALUES";
16+
TreeNode root = createTestTree();
17+
tester.testIntListofListsEquals(testTreeLevelValues(), levelValues(root), testTitle);
18+
}
19+
20+
/*
21+
* TEST UTILS
22+
*/
23+
private static TreeNode createTestTree() {
24+
// LEVEL 1
25+
TreeNode root = new TreeNode(0);
26+
27+
// LEVEL 2
28+
root.left = new TreeNode(1);
29+
root.right = new TreeNode(2);
30+
31+
// LEVEL 3
32+
root.left.left = new TreeNode(3);
33+
root.right.left = new TreeNode(5);
34+
root.right.right = new TreeNode(6);
35+
36+
// LEVEL 4
37+
root.left.left.right = new TreeNode(8);
38+
root.right.left.left = new TreeNode(11);
39+
root.right.right.left = new TreeNode(13);
40+
41+
// LEVEL 5
42+
root.right.right.left.right = new TreeNode(33);
43+
44+
return root;
45+
}
46+
47+
private static List<List<Integer>> testTreeLevelValues() {
48+
ArrayList<List<Integer>> allValues = new ArrayList<>();
49+
ArrayList<Integer> levelValues = new ArrayList<>();
50+
// LEVEL 1
51+
levelValues.add(0);
52+
allValues.add(levelValues);
53+
54+
// LEVEL 2
55+
levelValues = new ArrayList<Integer>();
56+
levelValues.add(1);
57+
levelValues.add(2);
58+
allValues.add(levelValues);
59+
60+
// LEVEL 3
61+
levelValues = new ArrayList<Integer>();
62+
levelValues.add(3);
63+
levelValues.add(5);
64+
levelValues.add(6);
65+
allValues.add(levelValues);
66+
67+
// LEVEL 4
68+
levelValues = new ArrayList<Integer>();
69+
levelValues.add(8);
70+
levelValues.add(11);
71+
levelValues.add(13);
72+
allValues.add(levelValues);
73+
74+
// LEVEL 5
75+
levelValues = new ArrayList<Integer>();
76+
levelValues.add(33);
77+
allValues.add(levelValues);
78+
79+
return allValues;
80+
}
81+
82+
/*
83+
* ALGO PROBLEMS
84+
*/
85+
public static List<List<Integer>> levelValues(TreeNode root) {
86+
ArrayList<List<Integer>> allValues = new ArrayList<>();
87+
Deque<TreeNode> dq = new LinkedList<>();
88+
dq.push(root);
89+
int levelSize = 1;
90+
TreeNode currNode = null;
91+
while (levelSize > 0) {
92+
ArrayList<Integer> values = new ArrayList<>();
93+
for (int i=0; i < levelSize; ++i) {
94+
currNode = dq.removeLast();
95+
values.add(currNode.value);
96+
if (currNode.left != null) {
97+
dq.push(currNode.left);
98+
}
99+
if (currNode.right != null) {
100+
dq.push(currNode.right);
101+
}
102+
}
103+
allValues.add(values);
104+
levelSize = dq.size();
105+
}
106+
107+
return allValues;
108+
}
109+
}

Tester.java

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
package com.cunningdj.grokJava;
22
import java.util.Arrays;
33
import java.util.HashMap;
4+
import java.util.List;
5+
import java.util.ArrayList;
46

57
public class Tester {
68
HashMap<String, Integer> testCounter;
@@ -47,6 +49,14 @@ public void testIntArrayEquals(int[] expected, int[] actual, String testTitle) {
4749
}
4850
}
4951

52+
public void testIntListofListsEquals(List<List<Integer>> expected, List<List<Integer>> actual, String testTitle) {
53+
if (expected.containsAll(actual)) {
54+
printTestSuccess(testTitle);
55+
} else {
56+
printTestFailure(testTitle, toString(expected), toString(actual));
57+
}
58+
}
59+
5060
private static String toString(int[] values) {
5161
if (values == null) {
5262
return "null";
@@ -61,6 +71,31 @@ private static String toString(int[] values) {
6171
return str;
6272
}
6373

74+
private static String toString(List<List<Integer>> allValues) {
75+
if (allValues == null) {
76+
return "null";
77+
}
78+
if (allValues.size() < 1) {
79+
return "";
80+
}
81+
String str = "";
82+
for (int i=0; i < allValues.size(); ++i) {
83+
if (i > 0) {
84+
str += ",[";
85+
} else {
86+
str += "[";
87+
}
88+
for (int j=0; j < allValues.get(i).size(); ++j) {
89+
if (j > 0) {
90+
str += ",";
91+
}
92+
str += String.valueOf(allValues.get(i).get(j));
93+
}
94+
str += "]";
95+
}
96+
return str;
97+
}
98+
6499
private static String toString(Object[] values) {
65100
if (values.length < 1) {
66101
return "";

0 commit comments

Comments
 (0)