310.最小高度树
310.最小高度树
310.最小高度树
题解
思路:给你一颗多叉树,求以哪个节点为根的时候高度最低。很容易想到是最长路径的中间那个节点,如果路径是偶数,则中间两个都可以,那么怎么求最长的路径呢,那么必然不是叶子节点,所以可以用bfs,把叶子节点加入队列,那么最后一次遍历队列时,队列中剩下的就是答案了
代码
func findMinHeightTrees(n int, edges [][]int) []int {
e := make([][]int, n)
dist := make([]int, n)
for _, edge := range edges {
//存边
u, v := edge[0], edge[1]
e[u] = append(e[u], v)
e[v] = append(e[v], u)
//计算入度
dist[u]++
dist[v]++
}
queue := make([]int, 0)
for leaf, cnt := range dist {
if cnt == 1 {
queue = append(queue, leaf)
}
}
ans := []int{0}
for len(queue) != 0 {
ans = queue
temp := queue
for len(temp) != 0 {
leaf := temp[0]
temp = temp[1:]
queue = queue[1:]
for _, v := range e[leaf] {
dist[v]--
if dist[v]==1{
queue = append(queue, v)
}
}
}
}
return ans
}