SQL 二叉树节点
时间:2022-07-22
本文章向大家介绍SQL 二叉树节点,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
这是一道在 HackerRank 上的 SQL 竞赛题,题目叫做“Binary Tree Nodes”,它的难度等级属于中级。
题目描述
给定一张表 BST,其中包含两列:N 和 P,其中 N 表示二叉树中节点的值,P 是 N 的父级。
Column |
Type |
---|---|
N |
Integer |
P |
Integer |
编写 SQL 以查找按节点值排序的二叉树的节点类型。每个节点只能属于以下类型中的一种:
- Root:如果节点是根节点。
- Leaf:如果节点是叶节点。
- Inner:如果节点既不是根节点也不是叶节点。
「输入样例」
N |
P |
---|---|
1 |
2 |
3 |
2 |
6 |
8 |
9 |
8 |
2 |
5 |
8 |
5 |
5 |
null |
「输出结果」
1 Leaf
2 Inner
3 Leaf
5 Root
6 Leaf
8 Inner
9 Leaf
「说明」
下图是示例数据构成的二叉树:
解决方案
每个节点的类型只能属于 Root、Leaf、Inner 中的一种。Root 类型很好判断,如果一个节点没有父节点,那该节点就是根节点,对应的类型就是 Root。如果一个节点没有子节点,那么它就是叶子节点,即为 Leaf 类型。
除了 Root 和 Leaf 类型的节点,剩下的就是 Inner 类型的节点。该如何判断一个节点是不是 Inner 类型呢?
能不能通过“存在子节点”这个条件判断呢?不能!因为根节点也有子节点。
那通过“存在父节点”这个条件判断呢?也不能!因为叶子节点存在父节点。
显然,这两个条件的范围都太大了,我们适当加入一些限制条件就可以用来判断是不是 Inner 类型的节点了。“存在子节点且不为根节点”和“存在父节点且不为叶子节点”都可以用来作为判断节点是 Inner 类型的条件。
具体的 SQL(MySQL) 实现如下:
SELECT
N,
IF(
P IS NULL,
'Root',
IF (
(SELECT
COUNT(*)
FROM
BST
WHERE P = a.N) = 0,
'Leaf',
'Inner'
)
)
FROM
BST a
ORDER BY N
- MySQL 教程
- MySQL 安装
- MySQL 管理与配置
- MySQL PHP 语法
- MySQL 连接
- MySQL 创建数据库
- MySQL 删除数据库
- MySQL 选择数据库
- MySQL 数据类型
- MySQL 创建数据表
- MySQL 删除数据表
- MySQL 插入数据
- MySQL 查询数据
- MySQL where 子句
- MySQL UPDATE 查询
- MySQL DELETE 语句
- MySQL LIKE 子句
- mysql order by
- Mysql Join的使用
- MySQL NULL 值处理
- MySQL 正则表达式
- MySQL 事务
- MySQL ALTER命令
- MySQL 索引
- MySQL 临时表
- MySQL 复制表
- 查看MySQL 元数据
- MySQL 序列 AUTO_INCREMENT
- MySQL 处理重复数据
- MySQL 及 SQL 注入
- MySQL 导出数据
- MySQL 导入数据
- MYSQL 函数大全
- MySQL Group By 实例讲解
- MySQL Max()函数实例讲解
- mysql count函数实例
- MYSQL UNION和UNION ALL实例
- MySQL IN 用法
- MySQL between and 实例讲解
- docker swarm的常用操作
- 组件库源码中这些写法你掌握了吗?
- spark-2.4.0-hadoop2.7-安装部署 4.1. Spark安装4.2. 环境变量修改4.3. 配置修改4.4. 分发到其他机器4.5. 启动spark
- spark-2.4.0-hadoop2.7-高可用(HA)安装部署 5.1. Spark安装5.2. 环境变量修改5.3. 配置修改5.4. 分发到其他机器5.5.
- spark-2.4.0-hadoop2.7-简单操作 2.1. 相关截图
- Navicat Premium 12.0.24安装与激活(亲测已成功激活) 2.1. 下载激活文件2.2. 激活步骤准备工作2.3. 激活Navicat
- VMware实现iptables NAT及端口映射
- Saltstack_使用指南01_部署
- Saltstack_使用指南02_远程执行-验证 2.1. Master与哪些minion正常通信2.2. 查看master与指定minion通信是否正常
- Saltstack_使用指南03_配置管理
- Saltstack_使用指南04_数据系统-Grains 4.1. grains条目项信息4.2. grains全部信息4.3. 查询grains指定信息5.1. m
- 揭开spring初始化方法的神秘面纱
- Saltstack_使用指南05_数据系统-Pillar 4.1. 修改配置文件并重启服务4.2. 显示pillar信息6.1. pillar的sls文件编写6.2.
- Python Docker 查看私有仓库镜像【转】
- CentOS7 Docker私有仓库搭建及删除镜像 【转】