为什么在二叉树中查找节点类型的查询不起作用

问题描述

我正在研究HackerRank练习-Binary Tree Nodes

表BST包含两列:N和P,其中N表示二叉树中节点的值,P是N的父级。

它询问:

编写查询以查找按节点值排序的二叉树的节点类型。为每个节点输出以下内容之一:

Root: If node is root node.
Leaf: If node is leaf node.
Inner: If node is neither root nor leaf node.

以下查询有效:

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

但是,如果我稍微反转一下查询以获取Leaf节点类型1st,则它将不再起作用。有什么想法吗?谢谢。

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

解决方法

更改

NOT IN (SELECT DISTINCT P FROM BST) --distinct is not needed there

收件人

NOT IN (SELECT P FROM BST WHERE P IS NOT NULL) --you had null values in column p

总而言之,您的代码无法正常工作,因为如果NOT IN 与包含NULL的列表匹配,则不会返回任何记录

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...