返回介绍

solution / 0600-0699 / 0608.Tree Node / README

发布于 2024-06-17 01:03:36 字数 2341 浏览 0 评论 0 收藏 0

608. 树节点

English Version

题目描述

表: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 是叶子节点,因为它们有父节点而没有子节点。

示例 2:

输入:
Tree table:
+----+------+
| id | p_id |
+----+------+
| 1  | null |
+----+------+
输出:
+----+-------+
| id | type  |
+----+-------+
| 1  | Root  |
+----+-------+
解释:如果树中只有一个节点,则只需要输出其根属性。

解法

方法一:条件判断 + 子查询

我们可以使用 CASE WHEN 条件判断语句来判断每个节点的类型,具体地:

  • 如果一个节点的 p_idNULL,则该节点为根节点;
  • 否则,如果一个节点是另一个节点的父节点(这里我们使用子查询来判断),则该节点为内部节点;
  • 否则,该节点为叶子节点。
# Write your MySQL query statement below
SELECT
  id,
  CASE
    WHEN p_id IS NULL THEN 'Root'
    WHEN id IN (SELECT p_id FROM Tree) THEN 'Inner'
    ELSE 'Leaf'
  END AS type
FROM Tree;

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文