日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

發布時間:2023/11/29 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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. 统计最高分的节点数目的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。