第一题 二叉搜索树的最小绝对差
class Solution {
public:
int tmp = -1 , minvalue =INT_MAX;
void traversal(TreeNode *cur){
if(cur == nullptr) return ;
traversal(cur->left);
if(tmp == -1){
tmp =cur->val;
}
else{
if(minvalue > abs(tmp - cur->val)){
minvalue = abs(tmp - cur->val);
}
tmp = cur->val;
}
traversal(cur->right);
return;
};
int getMinimumDifference(TreeNode* root) {
traversal(root);
return minvalue;
}
};
第二题 .二叉搜索树中的众数
class Solution {
public:
void traversal(TreeNode* cur, unordered_map<int,int> &map){
if(cur == nullptr) return;
traversal(cur->left,map);
map[cur->val]++;
traversal(cur->right,map);
};
bool static cmp(pair<int,int> &lhs,pair<int,int> &rhs){
return lhs.second>rhs.second;
};
vector<int> findMode(TreeNode* root) {
unordered_map <int,int> map;
traversal(root,map);
vector<pair<int,int>> vec(map.begin(),map.end());
sort(vec.begin(),vec.end(),cmp);
vector<int> result;
result.push_back(vec[0].first);
for(int i = 1;i <vec.size();i++){
if(vec[i].second == vec[0].second) result.push_back(vec[i].first);
else break;
}
return result;
}
};
第三题 二叉树的最近公共祖先
class Solution {
public:
void traversal(TreeNode* cur, unordered_map<int,int> &map){
if(cur == nullptr) return;
traversal(cur->left,map);
map[cur->val]++;
traversal(cur->right,map);
};
bool static cmp(pair<int,int> &lhs,pair<int,int> &rhs){
return lhs.second>rhs.second;
};
vector<int> findMode(TreeNode* root) {
unordered_map <int,int> map;
traversal(root,map);
vector<pair<int,int>> vec(map.begin(),map.end());
sort(vec.begin(),vec.end(),cmp);
vector<int> result;
result.push_back(vec[0].first);
for(int i = 1;i <vec.size();i++){
if(vec[i].second == vec[0].second) result.push_back(vec[i].first);
else break;
}
return result;
}
};