lc951翻转等价二叉树
我们可以为二叉树 T 定义一个翻转操作,如下所示:选择任意节点,然后交换它的左子树和右子树。
只要经过一定次数的翻转操作后,能使 X 等于 Y,我们就称二叉树 X 翻转等价于二叉树 Y。
/**
* description: 翻转等价二叉树
* author: samu
*/
public class Solution {
public boolean flipEquiv(TreeNode root1, TreeNode root2) {
if(root1 == null && root2 == null){
return true;
}
if(root1 == null || root2 == null){
return false;
}
return root1.val == root2.val ? concurrenceTraversal(root1, root2) : false;
}
private boolean concurrenceTraversal(TreeNode root1, TreeNode root2) {
boolean flagF = false;
boolean flagS = false;
if (root1.left == null && root2.left == null && root1.right == null && root2.right == null) {
//System.out.println(root1.val);
return true;
}
if (root1.left != null && root2.left != null && root1.left.val == root2.left.val) {
//System.out.println("left"+" "+"left");
flagF = concurrenceTraversal(root1.left, root2.left);
} else if (root1.left != null && root2.right != null && root1.left.val == root2.right.val) {
//System.out.println("left"+" "+"right");
flagF = concurrenceTraversal(root1.left, root2.right);
} else if(root1.left == null && root2.left == null ){
flagF = true;
}else if(root1.left == null && root2.right == null){
flagF = true;
}else {
flagF = false;
}
if (root1.right != null && root2.left != null && root1.right.val == root2.left.val) {
//System.out.println("right"+" "+"left");
flagS = concurrenceTraversal(root1.right, root2.left);
} else if (root1.right != null && root2.right != null && root1.right.val == root2.right.val) {
//System.out.println("right"+" "+"right");
flagS = concurrenceTraversal(root1.right, root2.right);
} else if(root1.right == null && root2.right == null ){
flagS = true;
}else if(root1.right == null && root2.left == null){
flagS = true;
}else {
flagS = false;
}
return flagF && flagS;
}
}
AC截图(这时间有点秀哦)