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
相关产品推荐
相关产品推荐

