530.二叉搜索树的最小绝对差
文档链接:[代码随想录]
‘题目链接:530.二叉搜索树的最小绝对差
题目:
给你一个二叉搜索树的根节点 root ,返回 树中任意两不同节点值之间的最小差值 。
差值是一个正数,其数值等于两值之差的绝对值。
class Solution {
private:
vector<int> vec;
void traversal(TreeNode* root){
if(root == NULL){
return;
}
traversal(root -> left);
vec.push_back(root -> val);
traversal(root -> right);
}
public:
int getMinimumDifference(TreeNode* root) {
traversal(root);
int min = 100000;
for(int i = 1;i < vec.size(); i++){
if(abs(vec[i] - vec[i-1]) < min){
min = abs(vec[i] - vec[i-1]);
}
}
return min;
}
};
501.二叉搜索树中的众数
文档链接:[代码随想录]
‘题目链接:501.二叉搜索树中的众数
题目:
给你一个含重复值的二叉搜索树(BST)的根节点 root ,找出并返回 BST 中的所有 众数(即,出现频率最高的元素)。
如果树中有不止一个众数,可以按 任意顺序 返回。
假定 BST 满足如下定义:
- 结点左子树中所含节点的值 小于等于 当前节点的值
- 结点右子树中所含节点的值 大于等于 当前节点的值
- 左子树和右子树都是二叉搜索树
class Solution {
private:
int maxCount = 0;
int count = 0;
TreeNode* pre = NULL;
vector<int> result;
void searchBST(TreeNode* cur){
if(cur == NULL)return;
searchBST(cur -> left);
if(pre == NULL){
count = 1;
}else if(pre -> val == cur -> val){
count++;
}else{
count = 1;
}
pre = cur;
if(count == maxCount){
result.push_back(cur -> val);
}else if(count > maxCount){
maxCount = count;
result.clear();
result.push_back(cur -> val);
}
searchBST(cur -> right);
return ;
}
public:
vector<int> findMode(TreeNode* root) {
count = 0;
maxCount = 0;
pre = NULL;
result.clear();
searchBST(root);
return result;
}
};
236. 二叉树的最近公共祖先
文档链接:[代码随想录]
‘题目链接:236. 二叉树的最近公共祖先
题目:
本题摆烂。。。
class Solution {
public:
TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q) {
if (root == q || root == p || 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;
if (left == NULL && right != NULL) return right;
else if (left != NULL && right == NULL) return left;
else { // (left == NULL && right == NULL)
return NULL;
}
}
};