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

HackerRank中MySQL代码逻辑正确却被判错误?(二叉树节点问题)

问题分析与修复

错误原因

  • 逻辑顺序颠倒:你先判断N是否在P列中,这会导致根节点误判:如果根节点没有子节点,它的N不会出现在P列,会被错误归类为Leaf;正确逻辑应该优先通过P是否为null识别根节点,这是根节点的唯一特征,不受是否有子节点影响。
  • 未指定列别名:HackerRank题目要求输出列有固定名称,你的查询没有给case表达式设置别名,导致输出的列标题是整个case语句的文本,不符合题目格式要求。

修正后的代码

如果题目要求输出两列(节点值和类型):

SELECT 
    N,
    CASE
        WHEN P IS NULL THEN 'Root'
        WHEN N IN (SELECT P FROM BST) THEN 'Inner'
        ELSE 'Leaf'
    END AS `Node Type`
FROM BST
ORDER BY N;

如果题目要求将节点值和类型合并为一列(和你原代码思路一致):

SELECT 
    CASE
        WHEN P IS NULL THEN CONCAT(N, ' Root')
        WHEN N IN (SELECT P FROM BST) THEN CONCAT(N, ' Inner')
        ELSE CONCAT(N, ' Leaf')
    END AS `Result`
FROM BST
ORDER BY N;

逻辑说明

  1. 优先判断P IS NULL:直接标记为Root,这是根节点的唯一标识,无论它有没有子节点。
  2. 接着判断N是否存在于P列:说明该节点有子节点,标记为Inner。
  3. 剩余节点既不是根节点也没有子节点,标记为Leaf。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 03:42:29