题目:
给定一个表 tree
,id 是树节点的编号, p_id 是它父节点的 id 。
树中每个节点属于以下三种类型之一:
叶子:如果这个节点没有任何孩子节点。
根:如果这个节点是整棵树的根,即没有父节点。
内部节点:如果这个节点既不是叶子节点也不是根节点。
写一个查询语句,输出所有节点的编号和节点的类型,并将结果按照节点编号排序。上面样例的结果为:
解释
节点 '1' 是根节点,因为它的父节点是 NULL ,同时它有孩子节点 '2' 和 '3' 。
节点 '2' 是内部节点,因为它有父节点 '1' ,也有孩子节点 '4' 和 '5' 。
节点 '3', '4' 和 '5' 都是叶子节点,因为它们都有父节点同时没有孩子节点。
样例中树的形态如下
注意
如果树中只有一个节点,你只需要输出它的根属性。
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/tree-node
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
解题思路:
方法一:使用CASE...WHEN....
先判断如果p_id为null就为根节点,如果id在p_id里面的话就是内部结点,其他都是叶子结点。
1 # Write your MySQL query statement below 2 select id, 3 case 4 when p_id is null then 'Root' 5 when id in( 6 select p_id 7 from tree 8 ) then 'Inner' 9 else 'Leaf' 10 end AS type 11 from tree;
方法二:IF
1 select id, 2 if(isnull(p_id),'Root', 3 if( 4 id in (select p_id from tree),'Inner','Leaf') )as Type 5 from tree
小知识:
①case ... when...语法
情况一:
case when 条件1 then 要显示的值1或语句1 when 条件2 then 要显示的值2或语句2 ... else 要显示的值n或语句n end
情况二:
case 要判断的字段或表达式 when 常量1 then 要显示的值1或语句1 when 常量2 then 要显示的值2或语句2 ... else 要显示的值n或语句n end
举例:
1 SELECT `店号`,`商品编码`,`销售数量`, 2 CASE 3 WHEN `销售数量` > 250 THEN '优' 4 WHEN `销售数量` > 150 THEN '良' 5 WHEN `销售数量` > 100 THEN '中' 6 ELSE '差' 7 END AS 评级 8 FROM `销售表`;
②if语法:
if(表达式成立,返回值,否则返回值)
-- 如果销售数量> 100的就为优秀,否则为一般 SELECT *,IF(`销售数量` > 200,'优秀','一般') AS 评价 FROM `销售表`;
标签:语句,...,tree,when,608,id,力扣,MySQL,节点 From: https://www.cnblogs.com/liu-myu/p/17279925.html