当前位置:   article > 正文

Find Mode in Binary Search Tree 寻找二叉搜索树的众数_二叉搜索树中的众数 c++

二叉搜索树中的众数 c++

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).

思路:

这道题如果允许用O(n)的空间复杂度就容易很多,可以用哈希表来做节点值(key),节点值出现的次数(value),最后在哈希表中寻找value最大的key即是答案。

为了实现O(1)的空间复杂度,且考虑到是二叉搜索树,所以采用中序遍历便可以得到由小到大的排序,存储pre上一个节点的值,如果pre不为空(非首节点)则通过cur统计连续出现相同数字的次数,如果次数等于max(历史出现最大数字对应的次数),数字就放到res中,大于max就说明找到了更大的数字对应的数字,则把res清空,数字放入res中,更新max。

这道题要注意的细节很多,初始化时cur为1,不能为0,因为考虑到头结点的问题,如下图(debug就知道为什么要初始化为1了,正确输出为1,2,初始化为0会输出2):

  1
    \
     2

代码如下:

  1. void findModeCore(TreeNode* root, TreeNode* &pre, int &cur, int &max_, vector<int> &res) {
  2. if (!root) {
  3. return;
  4. }
  5. findModeCore(root->left, pre, cur, max_,res);
  6. if (pre) {
  7. cur = (root->val == pre->val) ? (cur+1) : 1;
  8. }
  9. if (cur >= max_) {
  10. if (cur == max_) {
  11. res.push_back(root->val);
  12. }
  13. else {
  14. res.clear();
  15. res.push_back(root->val);
  16. max_ = cur;
  17. }
  18. }
  19. pre = root;
  20. findModeCore(root->right, pre, cur, max_, res);
  21. }
  22. vector<int> findMode(TreeNode* root) {
  23. vector<int> res;
  24. if (!root) {
  25. return res;
  26. }
  27. TreeNode* pre = nullptr;
  28. int cur = 1;
  29. int max_ = 0;
  30. findModeCore(root, pre, cur, max_, res);
  31. return res;
  32. }


声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/正经夜光杯/article/detail/882476
推荐阅读
相关标签
  

闽ICP备14008679号