You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

检查二叉树对称性的代码未达预期,求问题原因

问题分析与修复:二叉树对称判断代码失效原因

问题根源

你的代码失效的核心原因是**invertTree函数是原地修改原树**,而非创建一个新的反转树。

当你调用inverted_root = invertTree(root)时,函数会直接修改传入的root节点的左右子树指针,此时root本身已经变成了反转后的树。后续调用isSameTree(root, inverted_root)其实是在比较同一个树对象,自然永远返回True,完全失去了判断的意义。

比如你测试的输入root = [1,2,2,null,3,null,3],调用invertTree后原树被修改,此时root和inverted_root指向的是同一个修改后的树,所以isSameTree必然返回True,但原树实际并不对称。

修复方案

修改invertTree函数,让它创建新的节点来构建反转树,而不是原地修改原树:

# 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
            # 创建新节点,而非修改原节点的左右指针
            new_root = TreeNode(root.val)
            new_root.left = invertTree(root.right)
            new_root.right = invertTree(root.left)
            return new_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)

更高效的思路(可选)

其实不需要反转整个树再比较,直接递归比较原树的左子树和右子树是否镜像对称即可,这样可以节省空间:

class Solution:
    def isSymmetric(self, root: Optional[TreeNode]) -> bool:
        def isMirror(p: Optional[TreeNode], q: Optional[TreeNode]) -> bool:
            if not p and not q:
                return True
            if not p or not q:
                return False
            return p.val == q.val and isMirror(p.left, q.right) and isMirror(p.right, q.left)
        
        return isMirror(root.left, root.right) if root else True

内容的提问来源于stack exchange,提问作者user1190361

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 14:15:09