※ 引述 《Rushia (早瀬ユウカの体操服)》 之铭言:
:
: https://leetcode.com/problems/minimum-height-trees/description
: 310. Minimum Height Trees
: 给你一个数字 n 表示节点数,和一个表示边关系的阵列 edges,如果把某个节点作为roo
t
: 有最小的树高,那么他被称为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]
: (干)。
:
思路:
没有
解法:
没有
我写不出来
这是什么干题
我就跑去看解答了
ㄏㄏ
我要忏悔
1010