【SQL每日一练】查询二进制树节点

文章目录


题目

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

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

root:如果节点是根节点。

Leaf:如果节点是叶节点。

Inner:如果节点既不是根节点也不是叶节点。

输入

输出

复制代码
1 Leaf
2 Inner
3 Leaf
5 Root
6 Leaf
8 Inner
9 Leaf

一、题析

根据上面题目可知

  1. P 是 null,那对应的N就是 Root
  2. 如果P和N中有对应的值,那 就是 Inner
  3. 否则(P和N没有值)就是 Leaf

二、题解

1.MySQL/SqlServer

代码如下:

c 复制代码
select DISTINCT a.N,
case when a.P is null then 'Root'
when b.P is null then 'Leaf' 
else 'Inner' end
from BST a left join  BST  b on a.N = b.P 
order by a.N

或者

复制代码
SELECT BST.N, CASE
	WHEN BST.P IS NULL THEN 'Root' 
	WHEN Parents.P IS NULL THEN 'Leaf'
	ELSE 'Inner' END
FROM BST
LEFT JOIN (SELECT DISTINCT P FROM BST ) Parents on Parents.P=BST.N
ORDER BY BST.N

2.Oracle

复制代码
with tmp as (
  select n, p, level as l
  from   bst
  connect by prior n = p
  start with p is null
)
select n, case when l = 1 then 'Root'
            when l = (select max(l) from tmp) then 'Leaf'
            else 'Inner'
       end output
from tmp
order by n;

相关推荐
RoboWizard2 小时前
DIY移动硬盘?2230能否堪大任!
数据库·人工智能·智能手机·性能优化·负载均衡
六月雨滴2 小时前
CDB/PDB 多租户存储架构(12c+)
数据库·oracle·dba
城数派2 小时前
1958-2024年全球4km分辨率逐月土壤湿度栅格数据
数据库·arcgis·信息可视化·excel
六月雨滴2 小时前
Oracle 存储体系架构概述
数据库·oracle
zt1985q2 小时前
本地部署开源数据库管理工具 DBeaver 并实现外部访问( Windows 版本)
运维·服务器·网络·数据库·网络协议
珂玥c2 小时前
新增硬盘有脏数据如何处理——ubuntu16.04
linux·数据库·ide
东风破1372 小时前
DM8事务管理,多版本并发控制,及达梦开发接口
数据库·dm达梦数据库
城数派2 小时前
省市县三级的逐年植被覆盖度(FVC)数据
数据库·arcgis·信息可视化·数据分析
逸Y 仙X2 小时前
文章三十:Elasticsearch SQL实战案例
java·大数据·sql·elasticsearch·搜索引擎·全文检索
2301_769340672 小时前
HTML函数运行时触控屏失灵是硬件故障吗_输入层兼容性测试【详解】
jvm·数据库·python