题目:翻转等价二叉树
笨比写法(我写的):
class Solution {
public boolean flipEquiv(TreeNode root1, TreeNode root2) {
int root1Num = 0;
int root2Num = 0;
if(root1 == null && root2 == null)
return true;
if (root1 != null && root2 != null)
{
if (root1.val != root2.val)
return false;
if (root1.left != null){
root1Num++;
}
if (root1.right != null){
root1Num++;
}
if (root2.left != null){
root2Num++;
}
if (root2.right != null){
root2Num++;
}
if (root1Num != root2Num)
return false;
if ((root1.left != null && root2.left != null) || (root1.right != null && root2.right != null))
{
if ((root1.left != null && root2.left != null) && (root1.right != null && root2.right != null))
{
if (root1.left.val != root2.left.val && root1.right.val != root2.right.val)
{
if (root1.left.val == root2.right.val && root1.right.val == root2.left.val)
{
TreeNode temp = root2.left;
root2.left = root2.right;
root2.right = temp;
return flipEquiv(root1.left,root2.left) && flipEquiv(root1.right,root2.right);
}
}
else if (root1.left.val == root2.left.val && root1.right.val == root2.right.val)
{
return flipEquiv(root1.left, root2.left) && flipEquiv(root1.right, root2.right);
}
}else if (root1.left != null && root2.left != null)
{
return flipEquiv(root1.left,root2.left);
}else if (root1.right != null && root2.right != null){
return flipEquiv(root1.right,root2.right);
}
}else if (root1.left != null && root2.right !=null){
if (root1.left.val == root2.right.val){
root2.left = root2.right;
root2.right = null;
return flipEquiv(root1.left,root2.left);
}
}else if (root1.right != null && root2.left !=null){
if (root1.right.val == root2.left.val){
root2.right = root2.left;
root2.left = null;
return flipEquiv(root1.right,root2.right);
}
}else {
return true;
}
}
return false;
}
}
聪明写法(别人写的):
class Solution {
public boolean flipEquiv(TreeNode root1, TreeNode root2) {
if (root1 == null && root2 == null) return true;
if (root1 == null || root2 == null) return false;
if (root1.val == root2.val) {
return (flipEquiv(root1.left, root2.left) && flipEquiv(root1.right, root2.right)) || (flipEquiv(root1.left, root2.right) && flipEquiv(root1.right, root2.left));
}
return false;
}
}
两种写法的时空消耗都一样,但是别人写的就是如此优雅