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

LeetCode 101 对称树(Symmetric Tree)Python代码返回结果异常问题求助

问题分析与解决

你遇到的问题其实是递归函数的返回值传递漏洞——你的checktree函数在递归调用时没有正确返回结果,导致最终函数默认返回None,而None在Python的布尔判断中会被视为False,这就是为什么明明打印了true,最终却返回False的核心原因。

具体原因拆解

我们聚焦checktree函数的最后两行:

checktree(left.left, right.right)
checktree(left.right, right.left)

这里你确实触发了递归调用去检查子树对称性,但你既没有接收这两个调用的返回值,也没有通过逻辑判断后返回结果。

举个实际场景:当递归到最底层的对称叶子节点时,函数会打印true并返回True,但这个返回值并没有被上层的checktree调用接收。上层函数执行完这两个递归调用后,没有任何return语句,所以会默认返回None。这个None会一直传递到最外层的checktree调用,最终被isSymmetric函数返回,而LeetCode会把None当作False处理。

修正后的代码

你需要把两个递归调用的结果用and连接并返回,因为只有当左子树的左节点和右子树的右节点对称,并且左子树的右节点和右子树的左节点对称时,整个子树才是对称的:

# 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:
        if root.left == None and root.right == None:
            return True
        if root.left == None or root.right == None:
            return False
        if root.left.val != root.right.val:
            return False
        leftside = root.left
        rightside = root.right
        def checktree(left, right):
            if left == None and right == None:
                print('true')
                return True
            if left == None or right == None:
                print('false')
                return False
            if left.val != right.val:
                print('false')
                return False
            # 关键修正:返回两个递归调用的逻辑与结果
            return checktree(left.left, right.right) and checktree(left.right, right.left)
        return checktree(leftside, rightside)

额外优化提示

其实你isSymmetric函数开头的几个判断可以简化,因为checktree已经处理了空节点和值不相等的情况,简化后代码更简洁且逻辑一致:

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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 06:44:08