2049. 统计最高分的节点数目
生活随笔
收集整理的這篇文章主要介紹了
2049. 统计最高分的节点数目
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
2049. 統計最高分的節點數目
給你一棵根節點為 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 <= 10510^5105
- parents[0] == -1
- 對于 i != 0 ,有 0 <= parents[i] <= n - 1
- parents 表示一棵二叉樹。
解題思路
代碼
class Node{ public:Node *left,*right;int children;}; class Solution { public:int countHighestScoreNodes(vector<int>& parents) {map<int,Node*> m;for (int i = 0; i < parents.size(); ++i) {m[i]=new Node();}for (int i = 1; i < parents.size(); ++i) {Node *p=m[parents[i]],*cur=m[i];if (p->left!= nullptr)p->right=cur;else p->left=cur;}this->total=parents.size();count(m[0]);dfs(m[0]);return maxn;}long long maxx=0;int maxn=0,total;int count(Node *root){if (root== nullptr) return 0;int l=count(root->left),r=count(root->right);return root->children=(1+l+r);}void dfs(Node *root){if (root== nullptr) return ;dfs(root->left);dfs(root->right);long long num=(long long)(root->left== nullptr?1:root->left->children)*(long long)(root->right== nullptr?1:root->right->children)*(long long)max(1,total-root->children);if (num>maxx){maxx=num;maxn=1;}else if (num==maxx){maxn++;}} };總結
以上是生活随笔為你收集整理的2049. 统计最高分的节点数目的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 为什么老是梦到老公的前女友
- 下一篇: 梦到网恋前任男友是什么意思