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
return
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;
}
};
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;
}
};
相关文章推荐
- 501. Find Mode in Binary Search Tree
- 501. Find Mode in Binary Search Tree
- Find Mode in Binary Search Tree:带重复元素的搜索二叉树Morris遍历查找频率最大的元素
- Find Mode in Binary Search Tree
- 【LeetCode】Find Mode in Binary Search Tree 解题报告
- 501. Find Mode in Binary Search Tree
- 501. Find Mode in Binary Search Tree#2
- leetcode[Find Mode in Binary Search Tree]//待整理多种解法
- 501. Find Mode in Binary Search Tree
- Find mode in Binary Search Tree
- LeetCode - 501 - Find Mode in Binary Search Tree
- 501. Find Mode in Binary Search Tree
- leetcode-501-Find Mode in Binary Search Tree
- 501. Find Mode in Binary Search Tree
- 501. Find Mode in Binary Search Tree
- 501. Find Mode in Binary Search Tree
- LeetCode Find Mode in Binary Search Tree
- Find Mode in Binary Search Tree
- Leetcode 501 Find Mode in Binary Search Tree
- 501. Find Mode in Binary Search Tree