每天一道LeetCode题之翻转等价二叉树

    技术2025-05-31  11

    题目:翻转等价二叉树

    笨比写法(我写的):

    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; } }

    两种写法的时空消耗都一样,但是别人写的就是如此优雅

    Processed: 0.015, SQL: 9