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

LeetCode对称二叉树C语言代码部分测试用例运行异常求助

对称二叉树代码问题排查

你写的代码在root = [1,2,2]用例下运行不符合预期,核心问题有三个:

  • 静态全局变量未重置
    你定义的n、left、right都是static修饰的静态全局变量,生命周期贯穿整个程序运行全程,不会随函数调用自动归零。在线判题平台会连续执行多个测试用例,上一个用例修改的变量值会残留到当前用例。比如你先跑[1,2,2,3,4,4,3]用例,执行完后三个变量值都是3,再跑[1,2,2]用例时计数从3开始累加,最终判断条件n == left必然不成立,直接返回错误结果。
  • 边界场景判断缺失
    isSymmetric函数只处理了根节点左右子节点全为空的场景,没有覆盖「单侧子节点为空、另一侧非空」的不对称情况,遇到这类用例会直接访问空指针触发运行错误;symcenter递归函数的终止逻辑也有缺陷,遇到一个节点为空、另一个非空的不对称场景时直接返回,没有标记该状态为不对称,很容易把结构不匹配的树误判为对称。
  • 计数判断逻辑本身不可靠
    你通过统计子树节点数、遍历匹配计数的方式判断对称,本质绕开了结构校验:只要两个子树节点总数相同、遍历到的同值节点数和子树节点数一致就返回真,无法识别「值相同但节点位置不匹配」的不对称场景,存在逻辑漏判。

修正方案

不需要额外写节点计数函数,直接用递归交叉校验对称位置的节点即可,判断逻辑非常直接:

  1. 两个对称位置节点同时为空,属于对称
  2. 两个节点一个为空、一个非空,属于不对称
  3. 两个节点值不相等,属于不对称
  4. 递归校验「左节点的左孩子 和 右节点的右孩子」、「左节点的右孩子 和 右节点的左孩子」两组对称位置,两组都对称才判定为对称

修正后的可运行代码如下:

bool check(struct TreeNode* node1, struct TreeNode* node2){
    // 两节点全空,对称
    if(node1 == NULL && node2 == NULL) {
        return true;
    }
    // 一空一非空,不对称
    if(node1 == NULL || node2 == NULL) {
        return false;
    }
    // 当前值相等,且交叉子节点全对称才返回真
    return (node1->val == node2->val) 
        && check(node1->left, node2->right) 
        && check(node1->right, node2->left);
}

bool isSymmetric(struct TreeNode* root){
    // 空树直接判定对称,非空则校验左右子树
    return root == NULL ? true : check(root->left, root->right);
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 07:39:21