Skip to content

Commit efeceff

Browse files
authored
Update 310-minimum-height-trees.js
1 parent 6a72ceb commit efeceff

File tree

1 file changed

+50
-0
lines changed

1 file changed

+50
-0
lines changed

310-minimum-height-trees.js

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,53 @@
1+
/**
2+
* @param {number} n
3+
* @param {number[][]} edges
4+
* @return {number[]}
5+
*/
6+
var findMinHeightTrees = function(n, edges) {
7+
if(n === 1) return [0]
8+
if(n === 2) return [0, 1]
9+
const g = {}
10+
const degree = new Array(n).fill(0)
11+
for(const [u, v] of edges) {
12+
degree[u]++
13+
degree[v]++
14+
if(g[u] == null) g[u] = []
15+
if(g[v] == null) g[v] = []
16+
g[u].push(v)
17+
g[v].push(u)
18+
}
19+
let q = []
20+
for(let i = 0; i < n; i++) {
21+
if(degree[i] === 1) q.push(i)
22+
}
23+
let cnt = 0
24+
while(q.length) {
25+
const size = q.length
26+
const tmp = []
27+
for(let i = 0; i < size; i++) {
28+
const node = q[i]
29+
cnt++
30+
for(const nxt of (g[node] || [])) {
31+
degree[nxt]--
32+
if(degree[nxt] === 1) {
33+
tmp.push(nxt)
34+
}
35+
}
36+
}
37+
38+
q = tmp
39+
if(n - cnt <= 2) break
40+
}
41+
42+
const res = []
43+
while(q.length) {
44+
res.push(q.pop())
45+
}
46+
return res
47+
};
48+
49+
// another
50+
151
/**
252
* @param {number} n
353
* @param {number[][]} edges

0 commit comments

Comments
 (0)