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

为何二叉树对称判断的BFS代码返回False而非预期True?

二叉树对称性BFS代码失效原因分析

我用BFS方法判断二叉树对称性(验证左子树与右子树是否对称),但针对测试用例[1,2,2,3,4,4,3](树的节点列表),代码返回False,预期输出为True。

树的定义类如下:

class TreeNode:
    def __init__(self, val=0, left=None, right=None):
        self.val = val
        self.left = left
        self.right = right

我的代码如下:

def isSymmetric(root: Optional[TreeNode]) -> bool:
        q=[(root.left,root.right)]     #The Queue
        while q:
            p=q.pop(0)
            if p[0]==p[1]:
                if p[0]:                #checking if we have reached None (leaf)
                    q.append((p[0].left,p[1].right))
                    q.append((p[0].right,p[1].left))
            else:
                return False
       
        return True

代码失效的核心原因

问题出在**p[0]==p[1]的判断逻辑**上:

  • 在Python中,自定义类(比如TreeNode)的实例默认用==比较时,是判断两个对象的内存引用是否相同,而非属性值是否一致。
  • 测试用例里的对称节点(比如根节点的左子节点val=2和右子节点val=2)是两个独立的TreeNode对象,内存地址不一样,所以p[0]==p[1]会返回False,直接触发else分支返回False,与预期结果不符。
  • 只有当两个节点都是None时,p[0]==p[1]才会返回True,因为None是Python的单例对象,所有None的引用都指向同一内存地址。

正确的逻辑应该是先判断两个节点是否同时为None,若不是,再判断它们的val是否相等,而非直接用==比较整个节点对象。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 01:05:52