Skip to content

Commit d1410b5

Browse files
committed
Add SymmetricTree task solution
1 parent c29ebfe commit d1410b5

File tree

3 files changed

+80
-4
lines changed

3 files changed

+80
-4
lines changed
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 lombok.AllArgsConstructor;
4+
import lombok.NoArgsConstructor;
5+
6+
/**
7+
* <pre>
8+
* Given the root of a binary tree, check whether it is a mirror of itself (i.e., symmetric around its center).
9+
*
10+
* Example 1:
11+
* <img src="https://assets.leetcode.com/uploads/2021/02/19/symtree1.jpg"/>
12+
* Input: root = [1,2,2,3,4,4,3]
13+
* Output: true
14+
*
15+
* Example 2:
16+
* <img src="https://assets.leetcode.com/uploads/2021/02/19/symtree2.jpg"/>
17+
* Input: root = [1,2,2,null,3,null,3]
18+
* Output: false
19+
* </pre>
20+
*/
21+
public class SymmetricTree {
22+
23+
public static boolean isSymmetric(TreeNode root) {
24+
var left = root.left;
25+
var right = root.right;
26+
return equals(left, right);
27+
}
28+
29+
private static boolean equals(TreeNode node1, TreeNode node2) {
30+
if (node1 == null) {
31+
return node2 == null;
32+
}
33+
if (node2 == null) {
34+
return false;
35+
}
36+
return node1.val == node2.val && equals(node1.left, node2.right) && equals(node1.right, node2.left);
37+
}
38+
39+
@AllArgsConstructor
40+
@NoArgsConstructor
41+
public static class TreeNode {
42+
43+
int val;
44+
TreeNode left;
45+
TreeNode right;
46+
47+
TreeNode(int val) {
48+
this.val = val;
49+
}
50+
}
51+
}

src/test/java/by/andd3dfx/iterators/RecursiveIteratorTest.java

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,12 @@
11
package by.andd3dfx.iterators;
22

3-
import org.junit.Ignore;
4-
import org.junit.Test;
3+
import static org.assertj.core.api.Assertions.assertThat;
54

65
import java.util.ArrayList;
76
import java.util.Arrays;
87
import java.util.List;
98
import java.util.NoSuchElementException;
10-
11-
import static org.assertj.core.api.Assertions.assertThat;
9+
import org.junit.Test;
1210

1311
public class RecursiveIteratorTest {
1412

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
package by.andd3dfx.tree;
2+
3+
import static org.assertj.core.api.Assertions.assertThat;
4+
5+
import by.andd3dfx.tree.SymmetricTree.TreeNode;
6+
import org.junit.Test;
7+
8+
public class SymmetricTreeTest {
9+
10+
@Test
11+
public void isSymmetricMirroredLeftNRight() {
12+
TreeNode root = new TreeNode(1,
13+
new TreeNode(2, new TreeNode(3), new TreeNode(4)),
14+
new TreeNode(2, new TreeNode(4), new TreeNode(3))
15+
);
16+
assertThat(SymmetricTree.isSymmetric(root)).isTrue();
17+
}
18+
19+
@Test
20+
public void isSymmetricTheSameLeftNRight() {
21+
TreeNode root2 = new TreeNode(1,
22+
new TreeNode(2, null, new TreeNode(3)),
23+
new TreeNode(2, null, new TreeNode(3))
24+
);
25+
assertThat(SymmetricTree.isSymmetric(root2)).isFalse();
26+
}
27+
}

0 commit comments

Comments
 (0)