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

LeetCode对称树问题:翻转树+中序遍历解法为何未通过全部用例

对称树判定解法的逻辑问题说明

你的解法核心错误是错误认为「中序遍历结果相等」等价于「树结构镜像对称」,这个逻辑从根上就不成立,具体问题拆成三点说:

  • 中序遍历只记录非空节点的取值,不保留空节点的位置信息,结构完全不同的两棵树,完全可能生成一模一样的中序遍历序列。你没通过的测试用例[1,2,2,2,null,2]就是典型:原树的结构是根节点1的左右子节点都是2,左子节点2只有左孩子(值为2)、右孩子为空,右子节点2只有左孩子(值为2)、右孩子为空——这棵树明显不对称,但你对它做翻转之后,中序遍历得到的值序列和原树完全一致,自然会误判返回True。
    再举个更极端的反例:所有节点都沿左子树串成链的[1,2,null,3],和所有节点沿右子树串成链的[1,null,2,null,3],中序遍历结果都是[3,2,1],但两棵树结构天差地别,根本不可能满足对称要求。
  • 你的invert函数是原地修改输入的二叉树结构,这种直接篡改输入参数的写法,在算法题中很容易引入意料之外的边界问题,而且完全没有必要。
  • 对称树的正确判定逻辑不需要做整树翻转,本质只需要判断:根节点的左子树,是否和根节点的右子树互为镜像。判断两个子树互为镜像的标准非常直接:
    1. 两个子树的根节点值相等
    2. 左子树的左孩子,和右子树的右孩子互为镜像
    3. 左子树的右孩子,和右子树的左孩子互为镜像
      递归判定的过程中会自然校验空节点的位置匹配,不会出现结构不一致但序列相等的误判。

附正确的递归实现参考:

# 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 is_mirror(a: Optional[TreeNode], b: Optional[TreeNode]) -> bool:
            if not a and not b:
                return True
            if not a or not b:
                return False
            return a.val == b.val and is_mirror(a.left, b.right) and is_mirror(a.right, b.left)
        return is_mirror(root.left, root.right)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.02 05:49:18