1
+ /**
2
+ * Definition for a binary tree node.
3
+ * public class TreeNode {
4
+ * int val;
5
+ * TreeNode left;
6
+ * TreeNode right;
7
+ * TreeNode() {}
8
+ * TreeNode(int val) { this.val = val; }
9
+ * TreeNode(int val, TreeNode left, TreeNode right) {
10
+ * this.val = val;
11
+ * this.left = left;
12
+ * this.right = right;
13
+ * }
14
+ * }
15
+ */
16
+ class Solution {
17
+ public boolean flipEquiv (TreeNode root1 , TreeNode root2 ) {
18
+
19
+ Queue <TreeNode > queue = new LinkedList <>();
20
+
21
+ queue .offer (root1 );
22
+ queue .offer (root2 );
23
+ while (!queue .isEmpty ()) {
24
+ TreeNode curr1 = queue .poll ();
25
+ TreeNode curr2 = queue .poll ();
26
+
27
+ if (curr1 == null && curr2 == null ) {
28
+ continue ;
29
+ }
30
+ if (!isEquals (curr1 , curr2 )) {
31
+ return false ;
32
+ }
33
+ if (isEquals (curr1 .left , curr2 .left ) && isEquals (curr1 .right , curr2 .right )) {
34
+ queue .offer (curr1 .left );
35
+ queue .offer (curr2 .left );
36
+ queue .offer (curr1 .right );
37
+ queue .offer (curr2 .right );
38
+ } else if (isEquals (curr1 .left , curr2 .right ) && isEquals (curr1 .right , curr2 .left )) {
39
+ queue .offer (curr1 .left );
40
+ queue .offer (curr2 .right );
41
+ queue .offer (curr1 .right );
42
+ queue .offer (curr2 .left );
43
+ } else {
44
+ return false ;
45
+ }
46
+ }
47
+ return true ;
48
+ }
49
+
50
+ private boolean isEquals (TreeNode root1 , TreeNode root2 ) {
51
+ if (root1 == null && root2 == null ) {
52
+ return true ;
53
+ } else if (root1 != null && root2 != null && root1 .val == root2 .val ) {
54
+ return true ;
55
+ } else {
56
+ return false ;
57
+ }
58
+ }
59
+ }
0 commit comments