LeetCode # 608. 树节点

608. 树节点

题目

表:Tree

±------------±-----+

| Column Name | Type |

±------------±-----+

| id | int |

| p_id | int |

±------------±-----+

id 是该表中具有唯一值的列。

该表的每行包含树中节点的 id 及其父节点的 id 信息。

给定的结构总是一个有效的树。

树中的每个节点可以是以下三种类型之一:

  • "Leaf":节点是叶子节点。
  • "Root":节点是树的根节点。
  • "lnner":节点既不是叶子节点也不是根节点。
    编写一个解决方案来报告树中每个节点的类型。

以 任意顺序 返回结果表。

结果格式如下所示。

示例 1:

输入:

Tree table:

±---±-----+

| id | p_id |

±---±-----+

| 1 | null |

| 2 | 1 |

| 3 | 1 |

| 4 | 2 |

| 5 | 2 |

±---±-----+

输出:

±---±------+

| id | type |

±---±------+

| 1 | Root |

| 2 | Inner |

| 3 | Leaf |

| 4 | Leaf |

| 5 | Leaf |

±---±------+

解释:

节点 1 是根节点,因为它的父节点为空,并且它有子节点 2 和 3。

节点 2 是一个内部节点,因为它有父节点 1 和子节点 4 和 5。

节点 3、4 和 5 是叶子节点,因为它们有父节点而没有子节点。

分析

单独查询,结果合并,针对节点的不同条件去查找,然后合并结果

题解

sql 复制代码
# 分步查询
# 根节点的父节点为空
-- select id, 'Root' type from tree where p_id is NULL

-- # 叶子节点没有子节点,但有父节点
-- select id, 'Leaf' type from tree where id not in (
--     # 没有子节点就是在p_id列里不存在
--     select distinct p_id from tree where p_id is not NULL
-- ) and p_id is not NULL # 并且自己有父节点

-- # 内部节点,有孩子有父亲节点
-- select id, 'Inner' type from tree where id in(
--     # 自己也要出现在p_id列作为别人的父节点
--     select distinct p_id from tree where p_id is not NULL
-- ) and p_id is not NULL

# 将分步步骤连起来
# 根节点的父节点为空
select id, 'Root' type from tree where p_id is NULL
union
# 叶子节点没有子节点,但有父节点
select id, 'Leaf' type from tree where id not in (
    # 没有子节点就是在p_id列里不存在
    select distinct p_id from tree where p_id is not NULL
) and p_id is not NULL # 并且自己有父节点
union
# 内部节点,有孩子有父亲节点
select id, 'Inner' type from tree where id in(
    # 自己也要出现在p_id列作为别人的父节点
    select distinct p_id from tree where p_id is not NULL
) and p_id is not NULL
order by id
相关推荐
爱学习的阿磊16 分钟前
使用Fabric自动化你的部署流程
jvm·数据库·python
枷锁—sha21 分钟前
【SRC】SQL注入快速判定与应对策略(一)
网络·数据库·sql·安全·网络安全·系统安全
惜分飞34 分钟前
ORA-600 kcratr_nab_less_than_odr和ORA-600 4193故障处理--惜分飞
数据库·oracle
chian-ocean34 分钟前
CANN 生态进阶:利用 `profiling-tools` 优化模型性能
数据库·mysql
m0_5500246338 分钟前
持续集成/持续部署(CI/CD) for Python
jvm·数据库·python
AC赳赳老秦39 分钟前
代码生成超越 GPT-4:DeepSeek-V4 编程任务实战与 2026 开发者效率提升指南
数据库·数据仓库·人工智能·科技·rabbitmq·memcache·deepseek
啦啦啦_99991 小时前
Redis-2-queryFormat()方法
数据库·redis·缓存
玄同7652 小时前
SQLite + LLM:大模型应用落地的轻量级数据存储方案
jvm·数据库·人工智能·python·语言模型·sqlite·知识图谱
吾日三省吾码2 小时前
别只会“加索引”了!这 3 个 PostgreSQL 反常识优化,能把性能和成本一起打下来
数据库·postgresql
chian-ocean2 小时前
百万级图文检索实战:`ops-transformer` + 向量数据库构建语义搜索引擎
数据库·搜索引擎·transformer