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

GFG叶节点同层判断题Java代码仅过8/600用例问题排查

GFG「叶节点处于同一层级」题解代码错误排查

你的解题思路方向是正确的:收集所有叶节点的层级,再校验所有层级值是否一致,就能得到正确结果。但代码实现存在3个明确问题,导致几乎无法通过测试用例:

  • 核心逻辑缺失:check方法中从未调用你编写的递归遍历方法che
    你在check方法里新建了空的ArrayList后,直接遍历空列表做校验,全程没有执行二叉树遍历、叶节点层级收集的步骤,空列表遍历完会直接返回true,等于对所有输入都无判断直接返回结果,自然只能通过极少数恰好符合返回true的巧合用例。
  • 存在无效冗余代码
    check方法中定义的int c = 0变量全程没有被调用,属于无意义的冗余代码,不影响运行但属于书写疏漏。
  • 包装类比较存在隐患
    代码中用!=直接比较Integer包装类型对象,虽然层级数值较小的时候会被Java常量池缓存覆盖,不会触发问题,但如果遇到层级较大的场景,会出现值相等但引用不等的判断错误,规范写法应该直接用基本int类型接收值做比较,或者用equals方法判断。

修正后可通过的完整代码

补全递归方法调用、清理冗余代码后的实现如下:

class Solution {
    boolean check(Node root) {
        ArrayList<Integer> leafLevels = new ArrayList<>();
        // 启动递归遍历,根节点初始层级设为1,收集所有叶节点层级
        che(root, 1, leafLevels);
        // 校验所有叶节点层级是否一致
        int standardLevel = leafLevels.get(0);
        for (int curLevel : leafLevels) {
            if (curLevel != standardLevel) {
                return false;
            }
        }
        return true;
    }

    private void che(Node root, int level, ArrayList<Integer> leafLevels) {
        if (root == null) {
            return;
        }
        // 命中叶节点,记录层级
        if (root.left == null && root.right == null) {
            leafLevels.add(level);
            return;
        }
        // 递归遍历左右子树
        che(root.left, level + 1, leafLevels);
        che(root.right, level + 1, leafLevels);
    }
}

额外优化提示:实际解题时不需要等收集完全部叶节点再做校验,可以在遍历过程中记录第一个叶节点的层级,后续只要发现层级不匹配的叶节点就直接终止递归返回false,能减少不必要的遍历开销,提升运行效率。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 21:18:22