530. 二叉搜索树的最小绝对差
class Solution {
public:
void mid(TreeNode* root,vector<int>& res)
{
if(root==nullptr) return;
mid(root->left,res);
res.push_back(root->val);
mid(root->right,res);
}
int getMinimumDifference(TreeNode* root) {
vector<int> res;
mid(root,res);
int min=res[res.size()-1];
for(int i=1;i<res.size();i++)
{
if(res[i]-res[i-1]<min) min=res[i]-res[i-1];
}
return min;
}
};
501. 二叉搜索树中的众数
class Solution {
public:
void mid(TreeNode* root,unordered_map<int,int>& res)
{
if(root==nullptr) return;
mid(root->left,res);
res[root->val]++;
mid(root->right,res);
}
bool static cmp(pair<int,int> &a,pair<int,int> &b)
{
return a.second>b.second;
}
vector<int> findMode(TreeNode* root) {
unordered_map<int,int> res;
mid(root,res);
vector<pair<int,int>> result(res.begin(),res.end());
sort(result.begin(),result.end(),cmp);
vector<int> res1;
int count=result[0].second;
for(auto x:result)
{
if(x.second==count) res1.push_back(x.first);
}
return res1;
}
};
236. 二叉树的最近公共祖先
class Solution {
public:
TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q) {
if(root==p||root==q||root==NULL) return root;
TreeNode* left=lowestCommonAncestor(root->left,p,q);
TreeNode* right=lowestCommonAncestor(root->right,p,q);
if(left!=NULL&&right!=NULL) return root;
else if(left!=NULL&&right==NULL) return left;
else if(left==NULL&&right!=NULL) return right;
else return NULL;
}
};
需要重新做的题目
501. 二叉搜索树中的众数
236. 二叉树的最近公共祖先