力扣608(MySQL)-树节点(中等)
题目:
给定一个表 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 `销售表`;
力扣608(MySQL)-树节点(中等)的更多相关文章
- MySQL 树节点递归遍历所以子节点
DELIMITER $$ DROP FUNCTION IF EXISTS `getChildList`$$ CREATE FUNCTION `getChildList`(rootId INT) RET ...
- 力扣—— Swap Nodes in Pairs(两两交换链表中的节点) python实现
题目描述: 中文: 给定一个链表,两两交换其中相邻的节点,并返回交换后的链表. 你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换. 示例: 给定 1->2->3->4, ...
- 力扣—Remove Nth Node From End of List(删除链表的倒数第N个节点) python实现
题目描述: 中文: 给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点. 示例: 给定一个链表: 1->2->3->4->5, 和 n = 2. 当删除了倒数第二 ...
- mysql查询结果拼接树结构(树节点的移动)
mysql查询结果拼接树结构(树节点的移动) 思路:单表内查询全部数据,在业务层内递归拼接树结构. 前端用的是element的Tree 树形控件: 树结构实体: @Data @AllArgsConst ...
- 力扣208——实现 Trie (前缀树)
这道题主要是构造前缀树节点的数据结构,帮助解答问题. 原题 实现一个 Trie (前缀树),包含 insert, search, 和 startsWith 这三个操作. 示例: Trie trie = ...
- 力扣1689. 十-二进制数的最少数目-C语言实现-中等难度题
题目 传送门 如果一个十进制数字不含任何前导零,且每一位上的数字不是 0 就是 1 ,那么该数字就是一个 十-二进制数 .例如,101 和 1100 都是 十-二进制数,而 112 和 3001 不是 ...
- 力扣1438. 绝对差不超过限制的最长连续子数组-C语言实现-中等难度
题目 传送门 文本 给你一个整数数组 nums ,和一个表示限制的整数 limit,请你返回最长连续子数组的长度,该子数组中的任意两个元素之间的绝对差必须小于或者等于 limit . 如果不存在满足条 ...
- 力扣1052. 爱生气的书店老板-C语言实现-中等难度
题目 传送门 文本 今天,书店老板有一家店打算试营业 customers.length 分钟.每分钟都有一些顾客(customers[i])会进入书店,所有这些顾客都会在那一分钟结束后离开. 在某些时 ...
- 力扣 - 208. 实现Trie(前缀树)
目录 题目 思路 代码 复杂度分析 题目 208. 实现 Trie (前缀树) 思路 在我们生活中很多地方都用到了前缀树:自动补全,模糊匹配,九宫格打字预测等等... 虽然说用哈希表也可以实现:是否出 ...
- JS数据结构第六篇 --- 二叉树力扣练习题
1.第226题:翻转二叉树 递归+迭代两种实现方式: /** 反转二叉树 * Definition for a binary tree node. * function TreeNode(val) { ...
随机推荐
- obs 录制教程 手机录屏用 向日葵 手机投屏 能用有线用有线的连接
obs 录制教程 手机录屏用 向日葵 手机投屏 稍微有点卡 华为手机有个投屏 笔记本不支持这个 miracast 淘宝有卖 投屏设备的,搜 miracast 100多米 免费的就用向日葵就得了. 最新 ...
- reciterdoc 资料库 支持中文搜索了。 vuepress-plugin-fulltext-search(用一半)
http://pengchenggang.gitee.io/reciterdoc/ 支持中文搜索了,可是不容易了 通过插件 vuepress-plugin-fulltext-search 实现全文搜索 ...
- [置顶]
cas单点登录出现的重定向循环问题解决方案
先描述下出现的问题,截图如下: 出现该问题的原因可以通过F12查看Network找到,即http和https两个协议开头的url在不停的跳转,最后就出现了上图所示的重定向循环错误,导致页面崩溃. 解决 ...
- eclipse插件FindBugs使用笔记
FindBugs是一个静态分析工具,它检查类或者JAR 文件,将字节码与一组缺陷模式进行对比以发现可能的问题.Findbugs自带检测器,其中有60余种Bad practice,80余种Correct ...
- App启动页面优化
目录介绍 01.存在白屏问题 1.1 问题描述 1.2 问题分析 02.解决白屏的办法 2.1 解决方案分析 2.2 第一种解决方案 2.3 第二种解决方案 2.4 注意要点 03.Applicati ...
- Python简单程序设计(Unicode编码与字符间转换篇)
如题: (误以为本题存在两者之间互相转换,后附上逆过程代码) 解题方式如下: 逆过程:
- 记录--浏览器渲染15M文本导致崩溃怎么办
这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 最近,我刚刚完成了一个阅读器的txt文件阅读功能,但在处理大文件时,遇到了文本内容过多导致浏览器崩溃的问题. 一般情况下,没有任何样式渲染 ...
- uniapp如何给空包进行签名操作
这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 首先安装sdk https://www.oracle.com/java/technologies/downloads/ 正常下一步即可~安 ...
- 记录--开始使用Vue 3时应避免的10个错误
这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 Vue 3 稳定已经有一段时间了.许多代码库正在生产中使用它,其他人最终也必须进行迁移.我有机会与它一起工作,并记录了我的错误,这可能是你 ...
- 记录--JavaScript 用简约的代码实现一些日常功能
这里给大家分享我在网上总结出来的一些JavaScript 知识,希望对大家有所帮助 一.日期处理 1. 检查日期是否有效 该方法用于检测给出的日期是否有效: const isDateValid = ( ...