bool flipEquiv(TreeNode* root1, TreeNode* root2) {
     if(!root1 && !root2) return true;
     if(!root1 || !root2 || root1->val != root2->val) return false;
     
     
     return (flipEquiv(root1->left, root2->left) && flipEquiv(root1->right, root2->right))
          || (flipEquiv(root1->left, root2->right) && flipEquiv(root1->right, root2->left));
 }
 bool flipEquiv(TreeNode* root1, TreeNode* root2) {
     if (root1 == nullptr || root2 == nullptr) {
         return root1 == root2;
     }
     if (root1->val != root2->val) {
         return false;
     }
     return (flipEquiv(root1->left, root2->left) && flipEquiv(root1->right, root2->right)) ||
            (flipEquiv(root1->left, root2->right) && flipEquiv(root1->right, root2->left));
 }
 bool flipEquiv(TreeNode* root1, TreeNode* root2) {
     if( root1 == NULL && root2 != NULL ) return false;
     if( root2 == NULL && root1 != NULL ) return false;
     if( root1 == NULL && root2 == NULL ) return true;
     if( root1 -> val != root2 -> val ) return false;
     TreeNode* L1 = root1 -> left, *R1 = root1 -> right;
     TreeNode* L2 = root2 -> left, *R2 = root2 -> right;
     bool left = flipEquiv(L1, L2) & flipEquiv(R1, R2);
     bool right = flipEquiv(L1, R2) & flipEquiv(R1, L2);
     return left | right;
 }
Пример #4
0
    bool flipEquiv(TreeNode* root1, TreeNode* root2) {
        if (!same(root1, root2))
            return false;

        if (root1 == nullptr)
            return true;

        if (same(root1->left, root2->left) &&
                same(root1->right, root2->right) &&
                flipEquiv(root1->left, root2->left) &&
                flipEquiv(root1->right, root2->right))
            return true;

        if (same(root1->left, root2->right) &&
                same(root1->right, root2->left) &&
                flipEquiv(root1->left, root2->right) &&
                flipEquiv(root1->right, root2->left))
            return true;

        return false;
    }