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 (分别是节点 134 )。

思路: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 2049. 统计最高分的节点数目

LeetCode 589. N 叉树的前序遍历(迭代写法) / 2049. 统计最高分的节点数目 / 590. N 叉树的后序遍历

2049. 统计最高分的节点数目

2049. 统计最高分的节点数目

统计最高分的节点数目