LeetCode

来源:互联网 发布:哥特鸟嘴面具 知乎 编辑:程序博客网 时间:2024/06/05 18:21

Given a binary search tree (BST) with duplicates, find all the mode(s) (the most frequently occurred element) in the given BST.

Assume a BST is defined as follows:

  • The left subtree of a node contains only nodes with keys less than or equal to the node's key.
  • The right subtree of a node contains only nodes with keys greater than or equal to the node's key.
  • Both the left and right subtrees must also be binary search trees.

For example:
Given BST [1,null,2,2],

   1    \     2    /   2

return [2].

Note: If a tree has more than one mode, you can return them in any order.

Follow up: Could you do that without using any extra space? (Assume that the implicit stack space incurred due to recursion does not count).


问在一棵BST中,出现最多的数是哪个(哪些)

对BST进行中根遍历的话,结果就刚好是一个排序数组。我们记录他的上一个数字prenum,最大的次数cntmax,和当前已经出现过的次数cntnow。如果cntnow > cntmax,那么久清空数组并更新,如果相等,直接丢进数组就好了。时间复杂度O(n),空间复杂度我觉得最坏情况下有O(n),不懂那些说O(1)的是怎么想的。

/** * Definition for a binary tree node. * struct TreeNode { *     int val; *     TreeNode *left; *     TreeNode *right; *     TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */class Solution {public:    vector<int> findMode(TreeNode* root) {        solve(root);        return ans;    }private:    vector<int> ans;    int cntnow = 0, cntmax = 0, prenum = 0;    void solve(TreeNode* root) {        if (!root) return;        solve(root->left);        cntnow++;        if (prenum != root->val) {            prenum = root->val;            cntnow = 1;        }        if (cntnow > cntmax) {            cntmax = cntnow;            ans.clear();            ans.push_back(root->val);        }        else if (cntnow == cntmax) {            ans.push_back(root->val);        }        solve(root->right);    }};


原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 中立性细胞偏低怎么办? 孩子爱告状老师怎么办 高中学不好数学怎么办 想做老师应该怎么办 教师职称换学校怎么办 大四差选修学分怎么办 尔雅通识课学分没修满怎么办 大学全英文授课怎么办 小孩脑部有囊肿怎么办 防震期间门应该怎么办 在家待着没意思怎么办 人户分离上学怎么办 小孩上学没人接送怎么办 宝宝上学没人接送怎么办 上海浦东新区酒类许可证怎么办 金税盘里报税处理打不开怎么办 惠民卡到期了怎么办 遇到不拴狗链的主人怎么办 平安福没钱续保怎么办 提前很久到机场怎么办 机场来早了怎么办 机场去早了怎么办 只有高中学历该怎么办 没钱没学历该怎么办 中招分数压线怎么办 两岁宝宝蛀牙怎么办 大学必修课差一分怎么办 好医生差两分怎么办 万丽酒店怎么办会员 银行放款慢 业主怎么办 错过了毕业申请怎么办 初中生字写不好怎么办 对口升学没考上怎么办 天生喝不了酒怎么办 王者荣耀乱举报怎么办 易班考试不及格怎么办 易学习忘记密码怎么办 电脑qq不能登录怎么办 被钱心智迷失怎么办 自考第一次没过怎么办 宝宝不会用吸管怎么办