2049.统计最高分的节点数目
2049.统计最高分的节点数目
题解
题目意思是,一棵树,依次去掉一个节点,剩下的各个不连通的树,树的节点个数,进行相乘,得到的值的最大数目。即n个节点,有n的答案,然后在n个答案中找到值最大的,统计值最大的有几个,并返回这个数量。
思路就是dfs,具体看注释即可
代码
package main func countHighestScoreNodes(parents []int) (ans int) { n := len(parents) children := make([][]int, n) for node := 1; node < n; node++ { p := parents[node] children[p] = append(children[p], node) //统计出每个节点的子节点 } maxScore := 0 var dfs func(int) int dfs = func(node int) int { //计算每个节点的大小 score, sum := 1, 1 for _, v := range children[node] { sub := dfs(v) //算出子节点的个数 score *= sub //算值 sum += sub //这里把子节点的个数累加起来(默认为1,包括自己这个节点) } if node != 0 { //如果不是根节点,因为根节点只有左右子树 score *= n - sum //n-sum的值就是除去node这颗子树,剩下的节点数量 } if maxScore == score { ans++ } else if maxScore < score { ans = 1 maxScore = score } return sum //返回当前子树节点的数量 } dfs(0) return }