为何二叉树对称判断的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
相关产品推荐
相关产品推荐

