立志重刷代码随想录60天冲冲冲!!——第十八天

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

写递归稍微有一点感觉,双指针解法

class Solution {
public:
    TreeNode* pre = NULL;
    int MinValue = INT_MAX;
    int getMinimumDifference(TreeNode* root) {
        if (root == nullptr) return MinValue;

        int LeftValue = getMinimumDifference(root->left);
        if (pre != NULL && root->val - pre->val < MinValue) {
            MinValue = root->val - pre->val;
        }
        pre = root;
        int RightValue = getMinimumDifference(root->right);
        return MinValue;
    }
};

501.二叉搜索树中的众数

我感觉一般解法更适合我记忆。。。

1、先遍历二叉树,存在map中

2、对map的value进行排序(需要注意,排序函数需要加static)

3、排序完成后输出数组的第一个的key,同时查看后面是否有相同的众数

class Solution {
public:
    /* 一般方法,对于普通二叉树寻找众数 */
    // 先遍历,存在map中
    unordered_map<int,int> umap;
    void searchBST(TreeNode* root) {
        if (root == nullptr) return;
        umap[root->val]++;
        searchBST(root->left);
        searchBST(root->right);
        return;
    }

    // 对map中的value进行排序(必须加static)
    bool static cmp(pair<int,int> a, pair<int,int> b) {
        return a.second > b.second;
    }

    vector<int> findMode(TreeNode* root) {
        vector<int> res;
        searchBST(root); // 遍历
        vector<pair<int,int>> vec(umap.begin(), umap.end()); // 转换为数组
        sort(vec.begin(), vec.end(), cmp); // 数组根据value排序
    
        for (int i = 0; i < vec.size(); i++) {
            if (vec[i].second == vec[0].second) {
                res.push_back(vec[i].first);
            }
        }
        return res;
    }
};

236. 二叉树的最近公共祖先

后序,向上操作

class Solution {
public:
    TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q) {
        if (root == NULL) return root;
        if (root == p || root == q) return root;

        TreeNode* LeftNode = lowestCommonAncestor(root->left, p, q);
        TreeNode* RightNode = lowestCommonAncestor(root->right, p, q);
        if (LeftNode != NULL && RightNode != NULL) return root;
        else if (LeftNode == NULL && RightNode != NULL) return RightNode;
        else if (LeftNode != NULL && RightNode == NULL) return LeftNode;
        else return NULL;
    }
};

全部评论

相关推荐

点赞 评论 收藏
分享
头像
11-09 12:17
清华大学 C++
out11Man:小丑罢了,不用理会
点赞 评论 收藏
分享
点赞 1 评论
分享
牛客网
牛客企业服务