530. 二叉搜索树的最小绝对差
使用双指针,利用二叉搜索树递增的性质,中序搜索的同时记录最小差值。
class Solution {
public:
int max=INT_MAX;
TreeNode* pre=nullptr;
void geting(TreeNode *node){
if(node==nullptr)return;
geting(node->left);
if(pre!=nullptr&&max>node->val-pre->val){
max=node->val-pre->val;
}
pre=node;
geting(node->right);
}
int getMinimumDifference(TreeNode* root) {
geting(root);
return max;
}
};
501二叉搜索树中的众数
同样使用双指针
class Solution {
public:
int count;
int max;
vector<int> res;
TreeNode* pre;
void search(TreeNode* node){
if(node==nullptr)return;
search(node->left);
if(pre==nullptr){count=1;pre=node;}
else if(pre->val==node->val){
count++;
}
else count=1;
if(max==count){
res.push_back(node->val);
}
if(max<count)
{max=count;
res.resize(0);
res.push_back(node->val);
}
pre=node;
search(node->right);
}
vector<int> findMode(TreeNode* root) {
count=0;
max=0;
search(root);
return res;
}
};
236. 二叉树的最近公共祖先
后序向下遍历后往上传,收到两个不空就是这个node了
class Solution {
public:
TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q) {
if(root==NULL)return NULL;
if(root==p||root==q)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 right;
else if(left!=NULL&&right==NULL)return left;
else return NULL;
}
};