leetcode中等2049统计最高分的节点数目
Posted qq_40707462
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了leetcode中等2049统计最高分的节点数目相关的知识,希望对你有一定的参考价值。
一个二叉树,parents[i] 是节点 i 的父节点,删除一个节点,拆分成若干子树,求子树的【节点数】的乘积最大值的【个数】
输入:parents = [-1,2,0,2,0]
输出:3
解释:
- 节点 0 的分数为:3 * 1 = 3
- 节点 1 的分数为:4 = 4
- 节点 2 的分数为:1 * 1 * 2 = 2
- 节点 3 的分数为:4 = 4
- 节点 4 的分数为:4 = 4
最高得分为 4 ,有三个节点得分为 4 (分别是节点 1,3 和 4 )。
思路:parents[i] 是节点 i 的父节点,用 children 记录每个节点的子节点,dfs返回每个节点的个数sum,在dfs 中更新 score
class Solution
List<Integer>[] children;
int res=0;
long maxScore=0;
int n;
public int countHighestScoreNodes(int[] parents)
n=parents.length;
children=new List[n];
for (int i = 0; i < n; i++) children[i] = new ArrayList<Integer>();
for (int i = 0; i < n; i++)
int p=parents[i];
if (p != -1) children[p].add(i);//每个节点的子节点
dfs(0);
return res;
public int dfs(int node)
long score=1;
int sum=1;//返回值,每个节点的大小
for(int num:children[node])
int t=dfs(num);
score*=t;
sum+=t;
if(node!=0) score*=(n-sum);
if(maxScore==score) res++;
else if(maxScore<score)
maxScore=score;
res=1;
return sum;
以上是关于leetcode中等2049统计最高分的节点数目的主要内容,如果未能解决你的问题,请参考以下文章
LeetCode 2049统计最高分的节点数目[dfs 二叉树] HERODING的LeetCode之路
LeetCode 589. N 叉树的前序遍历(迭代写法) / 2049. 统计最高分的节点数目 / 590. N 叉树的后序遍历