530、二叉搜索树的最小绝对差
二叉搜索树是有序的,中序遍历变成一个有序数组,然后在有序数组上求最值。
class Solution {
private:
vector<int> vec;
void traversal(TreeNode* root){
if(root == NULL) return;
traversal(root->left);
vec.push_back(root->val);
traversal(root->right);
}
public:
int getMinimumDifference(TreeNode* root) {
vec.clear();
traversal(root);
if(vec.size() < 2) return 0;
int result = INT_MAX;
for(int i=1; i<vec.size(); i++){
result = min(result, vec[i] - vec[i-1]);
}
return result;
}
};
501、二叉搜索树种的众数
见讲解链接。
class Solution {
private:
void searchBST(TreeNode* cur, unordered_map<int, int>& map){
if (cur == NULL) return;
map[cur->val]++;
searchBST(cur->left, map);
searchBST(cur->right, map);
return ;
}
bool static cmp (const pair<int, int>& a, const pair<int, int>& b){
return a.second > b.second;
}
public:
vector<int> findMode(TreeNode* root) {
unordered_map<int, int> map; // key:元素,value:出现频率
vector<int> result;
if (root == NULL) return result;
searchBST(root, map);
vector<pair<int, int>> vec(map.begin(), map.end());
sort(vec.begin(), vec.end(), cmp); // 给频率排个序
result.push_back(vec[0].first);
for (int i = 1; i < vec.size(); i++) {
// 取最高的放到result数组中
if (vec[i].second == vec[0].second) result.push_back(vec[i].first);
else break;
}
return result;
}
};
236、二叉树的最近公共祖先
没懂,第二天早上再看看,今天有点累。