美文网首页
(Moris中序遍历)501. 二叉搜索树中的众数

(Moris中序遍历)501. 二叉搜索树中的众数

作者: 来到了没有知识的荒原 | 来源:发表于2021-08-04 08:31 被阅读0次

501. 二叉搜索树中的众数

O(1)空间复杂度遍历二叉树(没有开栈空间),因为每个节点访问次数不超过2,因此时间复杂度是O(n)

class Solution {
public:
    int cntm, cur, cnt;
    vector<int> vec;

    void update(int x) {
        if (vec.empty()) {
            cur = x, cnt = 1, cntm = max(cnt, cntm), vec.push_back(cur);
        } else {
            if (x != cur) cur = x, cnt = 1;
            else cnt++;

            if (cnt > cntm) cntm = cnt, vec = vector<int>{cur};
            else if (cnt == cntm) vec.push_back(cur);
        }
    }


    vector<int> findMode(TreeNode *root) {
        TreeNode *cur = root;
        TreeNode *pre = nullptr;
        while (cur) {
            if (!cur->left) {
                update(cur->val), cur = cur->right;
                continue;
            }
            pre = cur->left;
            while (pre->right && pre->right != cur) {
                pre = pre->right;
            }

            if (!pre->right)pre->right = cur, cur = cur->left;
            else pre->right = nullptr, update(cur->val), cur = cur->right;
        }
        return vec;
    }
};

相关文章

网友评论

      本文标题:(Moris中序遍历)501. 二叉搜索树中的众数

      本文链接:https://www.haomeiwen.com/subject/vlnyvltx.html