CUDA、CUDNN以及Pytorch的安裝記錄
阿新 • • 發佈:2022-04-13
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; } };