0
点赞
收藏
分享

微信扫一扫

golang力扣leetcode 310.最小高度树

闲云困兽 2022-04-06 阅读 28

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
}
举报

相关推荐

0 条评论