Re: [闲聊] 每日leetcode

楼主: Rushia (みけねこ的鼻屎)   2024-04-23 09:55:16
https://leetcode.com/problems/minimum-height-trees/description
310. Minimum Height Trees
给你一个数字 n 表示节点数,和一个表示边关系的阵列 edges,如果把某个节点作为root
有最小的树高,那么他被称为Minimum Height Tree(MHT),求出所有的MHT根节点有哪些。
思路:
1.最简单的方法就是对编号0~n-1的所有顶点做BFS,然后留下高度最小的,但是他测资
2*10^4,我去死。
2.这题没看过很难解出来,每个树都有叶子节点,我们把所有非叶子节点匡起来:
https://i.imgur.com/c7f3DyC.png
我们会发现从叶子节点出发一定不可能是MHT,因为他需要穿过中间圈起来的非叶节点
再到另一边的叶节点这样就至少高度为3了,相反的,我们如果从非叶节点往外出发的
话高度只为二,所以我们的目标就是找出红色部分的节点有哪些。
3.我们将那些不可能是MHT的节点都删除:
https://i.imgur.com/gGG26HF.png
我们发现删除后的图一样可以分成叶子节点和非叶节点。
不断的删除叶子节点后,我们可以得到不存在非叶节点的图:
https://i.imgur.com/qoGraPm.png
这就是我们要找的MHT root。
4.实现方式大概就几步:
建图 -> 算入度 -> 把入度为1(叶子节点)的节点加到queue BFS -> BFS时每次都把
该点删除并更新入度,如果删除完的点入度为 1 就表示删除后找到新的叶节点,放入
queue 不断BFS -> 返回最后剩下的叶节点
5.你辛苦的写完BFS送出之后马上喷一个WA,因为 n=1 是 corner case 要直接返回 [0]
(干)。
py code:
作者: oinishere (是oin捏)   2024-04-23 09:58:00
大师
作者: argorok (s.green)   2024-04-23 10:10:00
大师
作者: DJYOSHITAKA (Evans)   2024-04-23 10:30:00
大湿...
作者: JIWP (JIWP)   2024-04-23 11:09:00
大师

Links booklink

Contact Us: admin [ a t ] ucptt.com