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