给定二叉树的根,检查它是否是其自身的镜像(即围绕其中心对称)。
找到有效的解决方案很容易,但我想知道为什么我的解决方案不起作用。 我尝试执行此操作的方法如下:首先围绕穿过根的垂直轴反射原始树,然后将反射的树与原始树进行比较。当且仅当原始树是对称的时,反射树等于原始树。
我的代码如下。它会中断,例如对于输入
root = [1,2,2,null,3,null,3]
- 输出是 True 而不是 False。但我不明白为什么会发生这种情况;我相信这两个内部功能按预期工作。
# 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 isSymmetric(self, root: Optional[TreeNode]) -> bool:
def invertTree(root: Optional[TreeNode]) -> Optional[TreeNode]:
if root is None:
return None
root.left, root.right = invertTree(root.right), invertTree(root.left)
return root
def isSameTree(p: Optional[TreeNode], q: Optional[TreeNode]) -> bool:
if p is None and q is None:
return True
elif p is not None and q is None:
return False
elif p is None and q is not None:
return False
elif p.val != q.val:
return False
return isSameTree(p.left, q.left) and isSameTree(p.right, q.right)
inverted_root = invertTree(root)
return isSameTree(root, inverted_root)
快速解决方法是:
root_copy = copy.deepcopy(root)
inverted_root = invertTree(root)
return isSameTree(root_copy, inverted_root)