来源:力扣(LeetCode)

链接:https://leetcode-cn.com/problems/count-nodes-with-the-highest-score

题目描述

给你一棵根节点为 0 的 二叉树 ,它总共有 n 个节点,节点编号为 0 到 n - 1 。同时给你一个下标从 0 开始的整数数组 parents 表示这棵树,其中 parents[i] 是节点 i 的父节点。由于节点 0 是根,所以 parents[0] == -1 。

一个子树的 大小 为这个子树内节点的数目。每个节点都有一个与之关联的 分数 。求出某个节点分数的方法是,将这个节点和与它相连的边全部 删除 ,剩余部分是若干个 非空 子树,这个节点的 分数 为所有这些子树 大小的乘积 。

请你返回有 最高得分 节点的 数目 。

示例 1:

输入: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 )。

示例 2:

输入:parents = [-1,2,0]

输出:2

解释:

- 节点 0 的分数为:2 = 2

- 节点 1 的分数为:2 = 2

- 节点 2 的分数为:1 * 1 = 1

最高分数为 2 ,有两个节点分数为 2 (分别为节点 0 和 1 )。

提示:

n == parents.length

2 <= n <= 105

parents[0] == -1

对于 i != 0 ,有 0 <= parents[i] <= n - 1

parents 表示一棵二叉树。

解题思路

首先parant数组存储形式对于数来说不直观,很难进行操作,所以遍历parant数组,利用邻接链表建立一颗二叉树。然后使用二叉树的后续遍历,分别将左右子树和分数全求出来,进行比较和计数,需要注意int相乘可能会越界,需要使用long。

代码展示

class Solution {
public:
vector<vector<int>> mvviTree;
long long miMax;
int miCount;
void dfs(int root, int &count)
{
int iCount = 0;
long long iCount1 = 1;
count = 1;
for(auto iter:mvviTree[root])
{
dfs(iter, iCount);
count += iCount;
iCount1 *= iCount;
}
if(root)
iCount1 *= (mvviTree.size() - count);
if(iCount1 > miMax)
{
miMax = iCount1;
miCount = 1;
}
else if(iCount1 == miMax)
{
miCount++;
}
}
int countHighestScoreNodes(vector<int>& parents) {
int n = parents.size();
miCount = 0;
miMax = 0;
mvviTree.resize(n, vector<int>());
int iCount = 0;
for(int i = 1; i < n; i++)
{
mvviTree[parents[i]].push_back(i);
}
dfs(0, iCount);
return miCount; }
};

运行结果

												

LeetCode-2049 统计最高分的结点数的更多相关文章

  1. [九度OJ]1113.二叉树(求完全二叉树任意结点所在子树的结点数)

    原题链接:http://ac.jobdu.com/problem.php?pid=1113 题目描述: 如上所示,由正整数1,2,3……组成了一颗特殊二叉树.我们已知这个二叉树的最后一个结点是n.现在 ...

  2. Java实现 LeetCode 828 统计子串中的唯一字符(暴力+转数组)

    828. 统计子串中的唯一字符 我们定义了一个函数 countUniqueChars(s) 来统计字符串 s 中的唯一字符,并返回唯一字符的个数. 例如:s = "LEETCODE" ...

  3. leetcode 730. 统计不同回文子序列(区间dp,字符串)

    题目链接 https://leetcode-cn.com/problems/count-different-palindromic-subsequences/ 题意 给定一个字符串,判断这个字符串中所 ...

  4. [nowCoder] 完全二叉树结点数

    给定一棵完全二叉树的头节点head,返回这棵树的节点个数.如果完全二叉树的节点数为N,请实现时间复杂度低于O(N)的解法. 分析:遍历的话不管是前序.中序.后序还是层次都是O(N),低于O(N)只能是 ...

  5. LeetCode 136. Single Number C++ 结题报告

    136. Single Number -- Easy 解答 相同的数,XOR 等于 0,所以,将所有的数字 XOR 就可以得到只出现一次的数 class Solution { public: int ...

  6. Leetcode 466.统计重复个数

    统计重复个数 定义由 n 个连接的字符串 s 组成字符串 S,即 S = [s,n].例如,["abc", 3]="abcabcabc". 另一方面,如果我们可 ...

  7. Leetcode 149.直线上最多的点数

    直线上最多的点数 给定一个二维平面,平面上有 n 个点,求最多有多少个点在同一条直线上. 示例 1: 输入: [[1,1],[2,2],[3,3]] 输出: 3 解释: ^ | |        o ...

  8. LeetCode 1248. 统计「优美子数组」

    地址 https://www.acwing.com/solution/leetcode/content/5801/ 题目描述给你一个整数数组 nums 和一个整数 k. 如果某个子数组中恰好有 k 个 ...

  9. LEETCODE 1254 统计封闭岛屿的数目 Number of Closed Islands

    地址 https://leetcode-cn.com/contest/weekly-contest-162/problems/number-of-closed-islands/ 有一个二维矩阵 gri ...

  10. Leetcode 1254. 统计封闭岛屿的数目

    题目: 有一个二维矩阵 grid ,每个位置要么是陆地(记号为 0 )要么是水域(记号为 1 ). 我们从一块陆地出发,每次可以往上下左右 4 个方向相邻区域走,能走到的所有陆地区域,我们将其称为一座 ...

随机推荐

  1. go-carbon 1.5.2版本发布, 修复已知 bug 和新增功能及葡萄牙语翻译文件

    carbon 是一个轻量级.语义化.对开发者友好的golang时间处理库,支持链式调用. 目前已被 [awesome-go](https://github.com/avelino/awesome-go ...

  2. get请求拼接数组转字符串

    get请求拼接数组转换成字符串

  3. [编程基础] C++多线程入门6-事件处理的需求

    原始C++标准仅支持单线程编程.新的C++标准(称为C++11或C++0x)于2011年发布.在C++11中,引入了新的线程库.因此运行本文程序需要C++至少符合C++11标准. 文章目录 6 事件处 ...

  4. AcWing第85场周赛

    这场周赛是手速局hh 死或生 某国正在以投票的方式决定 2 名死刑犯(编号 1∼2)的生死. 共有 n 组人员(编号 1∼n)参与投票,每组 10 人. 每组成员只参与一名死刑犯的投票,其中第 i 组 ...

  5. flask_apscheduler

    网上很多文章包括官网给出来的,更多的是执行的函数和初始话app在同一文件 按照app 路由 模型类 视图 往下延申,项目已经成型,所以上述的方法不适用. (不用操心模型类与app互相导入的错误)下面分 ...

  6. [WPF]程序随系统自启动

    代码 Microsoft.Win32.RegistryKey key = Microsoft.Win32.Registry.CurrentUser.OpenSubKey("SOFTWARE\ ...

  7. [cocos2d-x]关于定时器

    什么是定时器 定时器的作用就是每隔一段时间,就执行一段自定义的动作,比如飞机向前方移动,子弹的移动等等.该函数定义在CCNode头文件中,基本上cocos2dx中所有的东西都能够使用定时器. 定时器的 ...

  8. 请求量突增一下,系统有效QPS为何下降很多?

    原创:扣钉日记(微信公众号ID:codelogs),欢迎分享,转载请保留出处. 简介 最近我观察到一个现象,当服务的请求量突发的增长一下时,服务的有效QPS会下降很多,有时甚至会降到0,这种现象网上也 ...

  9. 从log4j切换到logback后项目无法启动

    1.背景 有个旧项目之前使用的是log4j2来打印日志的,因为某些原因,同事想换成logback. 换成logback改动也很简单,大致就一下2步: 删除log4j2.xml配置,新增logback. ...

  10. [阿里云]Datahub测试使用记录

    由于需要测试阿里云Datahub功能,因此测了一下Datahub的一些功能 DATAHUB: 简介: 阿里云的流式数据(streaming)处理平台 对流式数据的发布(publish)订阅(subsc ...