Minimum Height Trees
MediumDepth-First SearchBreadth-First SearchGraphTopological Sort
Solution
export function findMinHeightTrees(n: number, edges: number[][]): number[] {
if (n <= 2) {
return Array.from({ length: n }, (_, i) => i);
}
const neighbors = Array.from({ length: n }, () => new Set<number>());
for (const [start, end] of edges) {
neighbors[start].add(end);
neighbors[end].add(start);
}
let leafNodes: number[] = [];
for (let i = 0; i < n; i++) {
if (neighbors[i].size === 1) {
leafNodes.push(i);
}
}
let numberOfRemainNodes = n;
while (2 < numberOfRemainNodes) {
numberOfRemainNodes -= leafNodes.length;
const newLeafNodes = [];
for (const leafNode of leafNodes) {
for (const neighbor of neighbors[leafNode]) {
neighbors[neighbor].delete(leafNode);
if (neighbors[neighbor].size === 1) {
newLeafNodes.push(neighbor);
}
}
leafNodes = newLeafNodes;
}
}
return leafNodes;
}