JZX轻语:简
LeetCode 951 - 翻转等价二叉树
发表于2024年05月28日
典型的树上递归问题,根据题目描述,只需要判断两棵树的根节点是否相同,然后递归判断左子树和右子树是否相同即可。在比较子树的等价时,需要考虑两种情况:1. 左子树和右子树的根节点相同;2. 左子树和右子树的根节点不同。对于第二种情况,需要交换左右子树的比较顺序。
class Solution:
def flipEquiv(self, root1: Optional[TreeNode], root2: Optional[TreeNode]) -> bool:
if root1 is None and root2 is None:
# 双空, 符合条件
return True
elif root1 is None or root2 is None:
# 单空, 不符合条件
return False
if root1.val != root2.val:
return False
return (
self.flipEquiv(root1.left, root2.left) and self.flipEquiv(root1.right, root2.right) or
self.flipEquiv(root1.right, root2.left) and self.flipEquiv(root1.left, root2.right)
)