检查二叉树对称性的代码无法按预期工作

问题描述 投票:0回答:1

给定二叉树的根,检查它是否是其自身的镜像(即围绕其中心对称)。

找到有效的解决方案很容易,但我想知道为什么我的解决方案不起作用。 我尝试执行此操作的方法如下:首先围绕穿过根的垂直轴反射原始树,然后将反射的树与原始树进行比较。当且仅当原始树是对称的时,反射树等于原始树。

我的代码如下。它会中断,例如对于输入

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)
python tree binary-tree symmetry
1个回答
0
投票

快速解决方法是:

root_copy = copy.deepcopy(root)
inverted_root = invertTree(root)
return isSameTree(root_copy, inverted_root)
© www.soinside.com 2019 - 2024. All rights reserved.