代码随想录算法训练营day18 | 530.二叉搜索树的最小绝对差、501.二叉搜索树中的众数、236. 二叉树的最近公共祖先

530.二叉搜索树的最小绝对差

点击查看代码
class Solution {
public:
    int result = INT_MAX;
    TreeNode *pre = nullptr;  //每次处理完当前节点后,将当前节点更新为pre节点
    void inOrder(TreeNode* root) {
        if(root == nullptr) return;
        inOrder(root->left);
        if(pre != nullptr) result = min(result, abs(root->val - pre->val));
        pre = root;
        inOrder(root->right);
    }
    int getMinimumDifference(TreeNode* root) {
        inOrder(root);
        return result;
    }
};

501.二叉搜索树中的众数

点击查看代码
class Solution {
public:
    int maxCount = 0;
    int curCount = 0;
    TreeNode *pre = nullptr;
    vector<int> result;

    void inOrder(TreeNode *root) {
        if(root == nullptr) return;

        inOrder(root->left);

        //计算当前元素已出现的频次
        if(pre == nullptr) curCount = 1;
        else if(pre->val == root->val) ++curCount;
        else curCount = 1;

        //根据当前元素出现的频次对当前元素做出不同的操作
        if(curCount == maxCount) result.push_back(root->val);
        if(curCount > maxCount) {
            //核心操作,若当前元素的频次达到最高,则结果集里的元素均不可能是众数,直接清空
            result.clear();
            result.push_back(root->val);
            maxCount = curCount;
        }

        pre = root;

        inOrder(root->right);
    }
    vector<int> findMode(TreeNode* root) {
        inOrder(root);
        return result;
    }
};
  1. 二叉树的最近公共祖先
    有点难,先跳过...

2025/03/02

posted @ 2025-03-02 17:35  coder小杰  阅读(12)  评论(0)    收藏  举报