Skip to content

Commit f74573e

Browse files
committed
Binary Tree Level Order Traversal - Recursive
1 parent 80739a4 commit f74573e

File tree

2 files changed

+57
-0
lines changed
  • src
    • main/java/io/dksifoua/leetcode/binarytreelevelordertraversal
    • test/java/io/dksifoua/leetcode/binarytreelevelordertraversal

2 files changed

+57
-0
lines changed

src/main/java/io/dksifoua/leetcode/binarytreelevelordertraversal/Solution.java

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,4 +34,23 @@ public List<List<Integer>> levelOrder(TreeNode root) {
3434

3535
return result;
3636
}
37+
38+
public List<List<Integer>> levelOrderRecursive(TreeNode root) {
39+
List<List<Integer>> result = new ArrayList<>();
40+
if (root == null) return result;
41+
42+
dfs(root, 0, result);
43+
return result;
44+
}
45+
46+
private void dfs(TreeNode node, int level, List<List<Integer>> result) {
47+
if (level <= result.size() - 1) {
48+
result.get(level).add(node.getValue());
49+
} else {
50+
result.add(new ArrayList<>() {{ add(node.getValue()); }});
51+
}
52+
53+
if (node.getLeft() != null) dfs(node.getLeft(), level + 1, result);
54+
if (node.getRight() != null) dfs(node.getRight(), level + 1, result);
55+
}
3756
}

src/test/java/io/dksifoua/leetcode/binarytreelevelordertraversal/SolutionTest.java

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,22 @@ void test1() {
2727
}
2828
}
2929

30+
@Test
31+
void test1Recursive() {
32+
TreeNode root = TreeNode.build(new Integer[] { 3, 9, 20, null, null, 15, 7 });
33+
List<List<Integer>> expected = new ArrayList<>() {{
34+
add(List.of(3));
35+
add(List.of(9, 20));
36+
add(List.of(15, 7));
37+
}};
38+
List<List<Integer>> actual = solution.levelOrderRecursive(root);
39+
40+
Assertions.assertEquals(expected.size(), actual.size());
41+
for (int i = 0; i < expected.size(); i++) {
42+
Assertions.assertArrayEquals(expected.get(i).toArray(), actual.get(i).toArray());
43+
}
44+
}
45+
3046
@Test
3147
void test2() {
3248
TreeNode root = TreeNode.build(new Integer[] { 1});
@@ -41,11 +57,33 @@ void test2() {
4157
}
4258
}
4359

60+
@Test
61+
void test2Recursive() {
62+
TreeNode root = TreeNode.build(new Integer[] { 1});
63+
List<List<Integer>> expected = new ArrayList<>() {{
64+
add(List.of(1));
65+
}};
66+
List<List<Integer>> actual = solution.levelOrderRecursive(root);
67+
68+
Assertions.assertEquals(expected.size(), actual.size());
69+
for (int i = 0; i < expected.size(); i++) {
70+
Assertions.assertArrayEquals(expected.get(i).toArray(), actual.get(i).toArray());
71+
}
72+
}
73+
4474
@Test
4575
void test3() {
4676
TreeNode root = TreeNode.build(new Integer[] { });
4777
List<List<Integer>> actual = solution.levelOrder(root);
4878

4979
Assertions.assertEquals(0, actual.size());
5080
}
81+
82+
@Test
83+
void test3Recursive() {
84+
TreeNode root = TreeNode.build(new Integer[] { });
85+
List<List<Integer>> actual = solution.levelOrderRecursive(root);
86+
87+
Assertions.assertEquals(0, actual.size());
88+
}
5189
}

0 commit comments

Comments
 (0)