Skip to content

Commit 1fb716c

Browse files
committed
Add MirrorTree task solution
1 parent 83c807d commit 1fb716c

File tree

2 files changed

+82
-0
lines changed

2 files changed

+82
-0
lines changed
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
package by.andd3dfx.tree;
2+
3+
import lombok.AllArgsConstructor;
4+
5+
/**
6+
* Mirror binary tree: for each node left & right sub nodes should be swapped
7+
*/
8+
public class MirrorTree {
9+
10+
public static Node mirror(Node node) {
11+
if (node == null) {
12+
return null;
13+
}
14+
15+
var oldLeft = mirror(node.left);
16+
node.left = mirror(node.right);
17+
node.right = oldLeft;
18+
return node;
19+
}
20+
21+
@AllArgsConstructor
22+
public static class Node {
23+
int value;
24+
Node left;
25+
Node right;
26+
27+
public Node(int value) {
28+
this.value = value;
29+
}
30+
}
31+
}
Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
package by.andd3dfx.tree;
2+
3+
import by.andd3dfx.tree.MirrorTree.Node;
4+
import org.junit.Test;
5+
6+
import static by.andd3dfx.tree.MirrorTree.mirror;
7+
import static org.assertj.core.api.Assertions.assertThat;
8+
9+
public class MirrorTreeTest {
10+
11+
/**
12+
* <pre>
13+
* 4 4
14+
* 3 5 => 5 3
15+
* 1 2 6 7 7 6 2 1
16+
* 8 9 0 0 9 8
17+
* -2 -2
18+
* </pre>
19+
*/
20+
@Test
21+
public void testMirror() {
22+
var _m2 = new Node(-2);
23+
var _8 = new Node(8, _m2, null);
24+
var _9 = new Node(9);
25+
var _0 = new Node(0);
26+
var _1 = new Node(1);
27+
var _2 = new Node(2, null, _8);
28+
var _6 = new Node(6, _9, _0);
29+
var _7 = new Node(7);
30+
var _3 = new Node(3, _1, _2);
31+
var _5 = new Node(5, _6, _7);
32+
var _4 = new Node(4, _3, _5);
33+
34+
var result = mirror(_4);
35+
36+
assertThat(result).isEqualTo(_4);
37+
check(_4, _5, _3);
38+
check(_5, _7, _6);
39+
check(_3, _2, _1);
40+
check(_7, null, null);
41+
check(_6, _0, _9);
42+
check(_2, _8, null);
43+
check(_1, null, null);
44+
check(_8, null, _m2);
45+
}
46+
47+
private void check(Node node, Node expectedLeft, Node expectedRight) {
48+
assertThat(node.left).isEqualTo(expectedLeft);
49+
assertThat(node.right).isEqualTo(expectedRight);
50+
}
51+
}

0 commit comments

Comments
 (0)