Skip to content

Commit f970c8a

Browse files
authored
Merge pull request #169 from fartem/reverse-odd-levels-of-binary-tree
2023-01-21 update: added "2415. Reverse Odd Levels of Binary Tree"
2 parents 465f54f + 2d8f3d1 commit f970c8a

File tree

4 files changed

+101
-3
lines changed

4 files changed

+101
-3
lines changed

Diff for: README.md

+1
Original file line numberDiff line numberDiff line change
@@ -742,6 +742,7 @@ Profile on LeetCode: [fartem](https://leetcode.com/fartem/).
742742
| 2326. Spiral Matrix IV | [Link](https://leetcode.com/problems/spiral-matrix-iv/) | [Link](./src/main/java/com/smlnskgmail/jaman/leetcodejava/medium/SpiralMatrixIV.java) |
743743
| 2375. Construct Smallest Number From DI String | [Link](https://leetcode.com/problems/construct-smallest-number-from-di-string/) | [Link](./src/main/java/com/smlnskgmail/jaman/leetcodejava/medium/ConstructSmallestNumberFromDIString.java) |
744744
| 2390. Removing Stars From a String | [Link](https://leetcode.com/problems/removing-stars-from-a-string/) | [Link](./src/main/java/com/smlnskgmail/jaman/leetcodejava/medium/RemovingStarsFromAString.java) |
745+
| 2415. Reverse Odd Levels of Binary Tree | [Link](https://leetcode.com/problems/reverse-odd-levels-of-binary-tree/) | [Link](./src/main/java/com/smlnskgmail/jaman/leetcodejava/medium/ReverseOddLevelsOfBinaryTree.java) |
745746

746747
### Hard
747748

Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
package com.smlnskgmail.jaman.leetcodejava.medium;
2+
3+
import com.smlnskgmail.jaman.leetcodejava.support.TreeNode;
4+
5+
// https://leetcode.com/problems/reverse-odd-levels-of-binary-tree/
6+
public class ReverseOddLevelsOfBinaryTree {
7+
8+
private final TreeNode input;
9+
10+
public ReverseOddLevelsOfBinaryTree(TreeNode input) {
11+
this.input = input;
12+
}
13+
14+
public TreeNode solution() {
15+
traverse(input.left, input.right, 1);
16+
return input;
17+
}
18+
19+
private void traverse(TreeNode l, TreeNode r, int level) {
20+
if (l == null || r == null) {
21+
return;
22+
}
23+
if (level % 2 == 1) {
24+
int temp = l.val;
25+
l.val = r.val;
26+
r.val = temp;
27+
}
28+
traverse(l.left, r.right, level + 1);
29+
traverse(l.right, r.left, level + 1);
30+
}
31+
32+
}

Diff for: src/main/java/com/smlnskgmail/jaman/leetcodejava/support/TreeNode.java

+22-3
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,7 @@
11
package com.smlnskgmail.jaman.leetcodejava.support;
22

3-
import java.util.ArrayList;
4-
import java.util.List;
5-
import java.util.Objects;
3+
import java.util.LinkedList;
4+
import java.util.Queue;
65

76
public class TreeNode {
87

@@ -16,6 +15,26 @@ public static boolean areEqual(TreeNode n1, TreeNode n2) {
1615
return n1 == null && n2 == null;
1716
}
1817

18+
public static TreeNode perfectFromArray(int... tree) {
19+
if (tree.length == 0) return null;
20+
TreeNode root = new TreeNode(tree[0]);
21+
Queue<TreeNode> q = new LinkedList<>();
22+
q.add(root);
23+
for (int i = 1; i < tree.length; i++) {
24+
TreeNode node = q.peek();
25+
assert node != null;
26+
if (node.left == null) {
27+
node.left = new TreeNode(tree[i]);
28+
q.add(node.left);
29+
} else if (node.right == null) {
30+
node.right = new TreeNode(tree[i]);
31+
q.add(node.right);
32+
q.remove();
33+
}
34+
}
35+
return root;
36+
}
37+
1938
public int val;
2039
public TreeNode left;
2140
public TreeNode right;
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
package com.smlnskgmail.jaman.leetcodejava.medium;
2+
3+
import com.smlnskgmail.jaman.leetcodejava.support.TreeNode;
4+
import org.junit.Test;
5+
6+
import static org.junit.Assert.assertTrue;
7+
8+
public class ReverseOddLevelsOfBinaryTreeTest {
9+
10+
@Test
11+
public void defaultTests() {
12+
assertTrue(
13+
TreeNode.areEqual(
14+
TreeNode.perfectFromArray(
15+
2, 5, 3, 8, 13, 21, 34
16+
),
17+
new ReverseOddLevelsOfBinaryTree(
18+
TreeNode.perfectFromArray(
19+
2, 3, 5, 8, 13, 21, 34
20+
)
21+
).solution()
22+
)
23+
);
24+
assertTrue(
25+
TreeNode.areEqual(
26+
TreeNode.perfectFromArray(7, 11, 13),
27+
new ReverseOddLevelsOfBinaryTree(
28+
TreeNode.perfectFromArray(7, 13, 11)
29+
).solution()
30+
)
31+
);
32+
assertTrue(
33+
TreeNode.areEqual(
34+
TreeNode.perfectFromArray(
35+
0, 2, 1, 0, 0, 0, 0, 2, 2, 2, 2, 1, 1, 1, 1
36+
),
37+
new ReverseOddLevelsOfBinaryTree(
38+
TreeNode.perfectFromArray(
39+
0, 1, 2, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2
40+
)
41+
).solution()
42+
)
43+
);
44+
}
45+
46+
}

0 commit comments

Comments
 (0)