[leetcode] 951. Flip Equivalent Binary Trees

Description

For a binary tree T, we can define a flip operation as follows: choose any node, and swap the left and right child subtrees.

A binary tree X is flip equivalent to a binary tree Y if and only if we can make X equal to Y after some number of flip operations.

Given the roots of two binary trees root1 and root2, return true if the two trees are flip equivelent or false otherwise.

Example 1:
Insert picture description here

Input: root1 = [1,2,3,4,5,6,null,null,null,7,8], root2 = [1,3,2,null,6,4,5,null,null,null,null,8,7]
Output: true
Explanation: We flipped at nodes with values 1, 3, and 5.

Example 2:

Input: root1 = [], root2 = []
Output: true

Example 3:

Input: root1 = [], root2 = [1]
Output: false

Example 4:

Input: root1 = [0,null,1], root2 = []
Output: false

Example 5:

Input: root1 = [0,null,1], root2 = [0,1]
Output: true

Constraints:

  • The number of nodes in each tree is in the range [0, 100].
  • Each tree will have unique node values in the range [0, 99].

analysis

The meaning of the question is: given two binary trees, ask the two binary trees to make the binary trees equal through left and right transformation. The recursive method for this question is to directly return to Fasle if the current nodes are not equal. If they are equal, the left and right branches can satisfy the conditions. The first is left and right = left and right; the other is left and right = right and left. Then write the recursive termination condition. It's simple if you can think of it.

Code

# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, val=0, left=None, right=None):
#         self.val = val
#         self.left = left
#         self.right = right
class Solution:
    def flipEquiv(self, root1: TreeNode, root2: TreeNode) -> bool:
        if(root1 is None and root2 is None):
            return True
        if(root1 is None or root2 is None):
            return False
        if(root1.val==root2.val):
            left=self.flipEquiv(root1.left,root2.left)
            right=self.flipEquiv(root1.right,root2.right)
            if(left and right):
                return True
            left=self.flipEquiv(root1.right,root2.left)
            right=self.flipEquiv(root1.left,root2.right)
            if(left and right):
                return True
            else:
                return False
        else:
            return False

Guess you like

Origin blog.csdn.net/w5688414/article/details/109249103