1. 程式人生 > 其它 >CUDA、CUDNN以及Pytorch的安裝記錄

CUDA、CUDNN以及Pytorch的安裝記錄

508. 出現次數最多的子樹元素和

給你一個二叉樹的根結點 root ,請返回出現次數最多的子樹元素和。如果有多個元素出現的次數相同,返回所有出現次數最多的子樹元素和(不限順序)。

一個結點的 「子樹元素和」 定義為以該結點為根的二叉樹上所有結點的元素之和(包括結點本身)。

示例 1:

輸入: root = [5,2,-3]
輸出: [2,-3,4]

示例 2:

輸入: root = [5,2,-5]
輸出: [2]

提示:

  • 節點數在 [1, 104] 範圍內
  • -105 <= Node.val <= 105

思路:

​ 本題涉及計運算元樹元素和,自然利用後序遍歷自底向上計算最為快捷,利用雜湊表以及一個計數量最後取出出現次數最多的元素即可。

class Solution {
public:
    vector<int> res;
    unordered_map<int,int>mp;//利用雜湊表記錄子樹元素和與出現次數
    int maxCount=0;//記錄最大出現次數
    vector<int> findFrequentTreeSum(TreeNode* root) {
        traver(root);
        for(auto a:mp){
            if(a.second==maxCount){
                res.push_back(a.first);
            }
        }
        return res;
    }
    //返回子樹元素和 二叉樹遍歷
    int traver(TreeNode* root){
        if(root==nullptr)return 0;

        int rootLeft=traver(root->left);
        int rootRight=traver(root->right);
        //後序遍歷
        int rootSum=root->val+rootLeft+rootRight;
        if(mp.count(rootSum)){
            mp.at(rootSum)++; 
        }else{ 
            mp.emplace(rootSum,1);
        }
        //更新最大次數
        maxCount=(maxCount>mp.at(rootSum))?maxCount:mp.at(rootSum);
        return rootSum;
    }
};