530.二叉搜索树的最小绝对差
530. 二叉搜索树的最小绝对差 - 力扣(LeetCode)
class Solution {
public:
void travel(TreeNode* root, vector<int> &inorder){
if(root == nullptr){
return ;
}
if(root->left != nullptr){
travel(root->left, inorder);
}
inorder.push_back(root->val);
if(root->right != nullptr){
travel(root->right, inorder);
}
}
int getMinimumDifference(TreeNode* root) {
int minDiff = INT_MAX;
vector<int> inorder;
travel(root, inorder); // 中序遍历,数组为有序数组
for(int i = 1; i < inorder.size(); i++){
minDiff = min(minDiff, inorder[i] - inorder[i - 1]);
}
return minDiff;
}
};
501.二叉搜索树中的众数
class Solution {
public:
void travel(TreeNode* root, int& count, int& max_count, int& pre_val, vector<int> &max_count_val){
if(root == nullptr){
return ;
}
if(root->left){ // 左边
travel(root->left, count, max_count, pre_val, max_count_val);
}
// 处理节点
if(root->val == pre_val){
count++;
if(count == max_count){
max_count_val.push_back(pre_val);
}
if(count > max_count){
max_count = count;
max_count_val.clear();
max_count_val.push_back(pre_val);
}
}
if(root->val != pre_val){
count = 1;
pre_val = root->val;
if(count == max_count){
max_count_val.push_back(pre_val);
}
}
// 右边
if(root->right){
travel(root->right, count, max_count, pre_val, max_count_val);
}
}
vector<int> findMode(TreeNode* root) {
vector<int> ans;
int count = 0, max_count = 1;
int pre_val = INT_MIN;
travel(root, count, max_count, pre_val, ans);
return ans;
}
};
236. 二叉树的最近公共祖先
236. 二叉树的最近公共祖先 - 力扣(LeetCode)
这题太绕了,还得练
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) return right;
if(right == nullptr) return left;
return root;
}
};