530.二叉搜索树的最小绝对差
class Solution {
public:
int min = INT_MAX;
TreeNode* pre = nullptr;
void traversal(TreeNode* root){
if(root == nullptr) return;
getMinimumDifference(root->left);
if(pre != nullptr && root->val - pre->val < min) min = root->val - pre->val;
pre = root;
getMinimumDifference(root->right);
}
int getMinimumDifference(TreeNode* root) {
traversal(root);
return min;
}
};
501.二叉搜索树中的众数
class Solution {
public:
TreeNode* pre = nullptr;
vector<int>result;
int count = 0;
int countMax = 0;
void traversal(TreeNode* root){
if(root == nullptr) return;
traversal(root->left);
if(pre != nullptr && root->val == pre->val) {
count++;
}
else{
count =1;
}
pre = root;
if(count == countMax) result.push_back(root->val);
if(count > countMax){
countMax = count;
result.clear();
result.push_back(root->val);
}
traversal(root->right);
}
vector<int> findMode(TreeNode* root) {
traversal(root);
return result;
}
};
236. 二叉树的最近公共祖先
class Solution {
public:
TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q) {
if(root == nullptr || root == p || root == q) return root;
TreeNode* left = lowestCommonAncestor(root->left,p,q);
TreeNode* right = lowestCommonAncestor(root->right,p,q);
if(left!=nullptr && right!=nullptr) return root;
else if(left==nullptr && right!=nullptr) return right;
else if(left!=nullptr && right==nullptr) return left;
else return nullptr;
}
};