File tree Expand file tree Collapse file tree 2 files changed +82
-0
lines changed
main/java/by/andd3dfx/tree
test/java/by/andd3dfx/tree Expand file tree Collapse file tree 2 files changed +82
-0
lines changed Original file line number Diff line number Diff line change
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
+ }
Original file line number Diff line number Diff line change
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
+ }
You can’t perform that action at this time.
0 commit comments