您的位置:首页 > 其它

Find Mode in Binary Search Tree

2018-01-12 13:59 399 查看
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 an
8dff
y extra space? (Assume that the implicit stack space incurred due to recursion does not count).

 

这道题求二分搜索树中的众数,这里定义的二分搜索树中左根右结点之间的关系是小于等于的,可以利用一个哈希表来记录数字和其出现次数之前的映射,然后维护一个变量mx来记录当前最多的次数值,这样在遍历完树之后,根据这个mx值就能把对应的元素找出来。

class Solution {
public:
vector<int> findMode(TreeNode* root) {
if (!root) return {};
vector<int> res;
TreeNode *p = root;
stack<TreeNode*> s;
unordered_map<int, int> m;
int mx = 0;
while (!s.empty() || p) {
while (p) {
s.push(p);
p = p->left;
}
p = s.top(); s.pop();
mx = max(mx, ++m[p->val]);
p = p->right;
}
for (auto a : m) {
if (a.second == mx) {
res.push_back(a.first);
}
}
return res;
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: