【谷歌面试题】找出二叉查找树中出现频率最高的元素
2013-05-23 11:38
447 查看
找出二叉查找树中出现频率最高的元素。树中结点满足left->val <= root->val <= right->val。如果多个元素出现次数相等,返回最小的元素。
在一个有序数组中,我们查找出现频率最高的元素,很简单,顺序扫描一遍即可统计出。那么我们对二叉查找树也可以用类似方式统计,因为中序遍历序列就是有序序列,所以我们在中序遍历的过程中就可以统计出出现频率最高的元素。
在一个有序数组中,我们查找出现频率最高的元素,很简单,顺序扫描一遍即可统计出。那么我们对二叉查找树也可以用类似方式统计,因为中序遍历序列就是有序序列,所以我们在中序遍历的过程中就可以统计出出现频率最高的元素。
class TreeNode { public: int val; TreeNode *left; TreeNode *right; TreeNode(int val, TreeNode* left = NULL, TreeNode *right = NULL) { this->val = val; this->left = left; this->right = right; } }; int GetMostFrequently(TreeNode * root) { void _GetMostFrequently(TreeNode *root, int & current, int & currentFrequency, int & maxFrequency, int & mostFrequently); if(root == NULL) throw new invalid_argument("Can't be a NULL tree"); int mostFrequently = INT_MAX; int current = INT_MAX; int currentFrequency = 0; int maxFrequency = 0; _GetMostFrequently(root, current, currentFrequency, maxFrequency, mostFrequently); return mostFrequently; } void _GetMostFrequently(TreeNode *root, int & current, int & currentFrequency, int & maxFrequency, int & mostFrequently) { if(root == NULL) return; _GetMostFrequently(root->left, current, currentFrequency, maxFrequency, mostFrequently); if(root->val == current) ++currentFrequency; else { current = root->val; currentFrequency = 1; } if(currentFrequency > maxFrequency) { maxFrequency = currentFrequency; mostFrequently = current; } _GetMostFrequently(root->right, current, currentFrequency, maxFrequency, mostFrequently); }
相关文章推荐
- 水贴王之续,找出数组里出现频率最高的元素
- Javascript面试题-找出数组中频率最高元素的多种方法
- 水贴王之续,找出数组里出现频率最高的元素
- 数据分析 面试题解答:如何从10亿查询词找出出现频率最高的10个?
- 怎样从10亿查询词找出出现频率最高的10个
- 给定一个字符串如何判断该字符串中某一字符出现的频率并找出出现频率最高的字符和频率
- Python 中找出字符串中出现频率最高的字母
- 找出字符串中出现频率最高的字符
- 怎样从10亿查询词找出出现频率最高的10个
- leetcode_347. Top K Frequent Elements 找出现频率最高的前k个元素
- hdu1298 T9(手机输入法,每按一个数字,找出出现频率最高的字串,字典树+DFS)
- 【谷歌面试题】有序输出两棵二叉查找树中的元素
- 找出文本中出现频率最高的10个单词(java实现)
- 程序员求职之道(《程序员面试笔试宝典》)之海量数据处理(如何从10亿查询词找出出现频率最高的10个)?
- 【面试题】数组中有两个元素出现了奇数次,其他元素出现了偶数次。找出这两个元素
- 怎么从10亿个查询词找出出现频率最高的10个
- hdu1298 T9(手机输入法,每按一个数字,找出出现频率最高的字串,字典树+DFS)
- 怎样从10亿查询词找出出现频率最高的10个
- 找出一篇英语文档中出现频率最高的十个单词
- 怎样从10亿查询词找出出现频率最高的10个