目录
[530. 二叉搜索树的最小绝对差](#530. 二叉搜索树的最小绝对差)
[501. 二叉搜索树中的众数](#501. 二叉搜索树中的众数)
[236. 二叉树的最近公共祖先](#236. 二叉树的最近公共祖先)
530. 二叉搜索树的最小绝对差
cpp
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode() : val(0), left(nullptr), right(nullptr) {}
* TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
* TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
* };
*/
class Solution {
void dfs(TreeNode* root,int& pre,int& ans){
if(!root)return ;
dfs(root->left,pre,ans);
if(pre==-1)pre=root->val;
else {
ans=min(ans,root->val-pre);
pre=root->val;
}
dfs(root->right,pre,ans);
}
public:
int getMinimumDifference(TreeNode* root) {
int ans=INT_MAX;
int pre=-1;
dfs(root,pre,ans);
return ans;
}
};
501. 二叉搜索树中的众数
cpp
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode() : val(0), left(nullptr), right(nullptr) {}
* TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
* TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
* };
*/
class Solution {
int maxnum=0;
unordered_map<int,int>map;
void search(TreeNode* node) {
if(!node)return;
map[node->val]++;
maxnum=max(maxnum,map[node->val]);
search(node->left);
search(node->right);
}
public:
vector<int> findMode(TreeNode* root) {
search(root);
vector<int> ans;
for(auto& [key,value]:map){
if(value==maxnum)ans.push_back(key);
}
return ans;
}
};
236. 二叉树的最近公共祖先
cpp
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q) {
if(!root||root==p||root==q)return root;
TreeNode* left=lowestCommonAncestor(root->left,p,q);
TreeNode* right=lowestCommonAncestor(root->right,p,q);
if(left&&right)return root;
else if(left&&!right)return left;
else if(!left&&right)return right;
else return NULL;
}
};
