如何解决在二叉搜索树中查找最常见的单词
我正在编写一个函数,以在二叉搜索树中输出最常见的单词,但它会按字母顺序而不是最常见的单词在bst的顶部输出单词。
例如:
输入:abc abc abc abc xyz xyz xyz xyz xyz xyz
输出:abc
我真的不知道问题是什么,任何帮助将不胜感激。
void WordAnalyzer::findCommon(TreeNode* root) {
if (root != NULL) {
findCommon(root->left);
if (prev != NULL) {
if (root->data == prev->data) {
currCount++;
}
else {
currCount = 1;
}
}
if (currCount > maxCount) {
maxCount = currCount;
maxWord = root->data;
}
prev = root;
findCommon(root->right);
}
}
string WordAnalyzer::getMostCommonWord() {
findCommon(root);
return maxWord;
}
解决方法
从代码中尚不清楚Parser
的初始化方式和初始化位置,但是如果在运行此代码之前未明确初始化currCount
,则您的行为不确定。
在查看BST中的第一个(最左边)元素时,您设置了prev = root
,但没有设置currCount
,那么当您访问下一个元素时,您增加了currCount
乘以1,但您从未给过它一个初始值,并且它基本上可以包含任何“垃圾”值。
只需创建一个键为“ word”且值为“ count”的地图即可。使用任何遍历(例如Inorder)遍历BST,并增加对应于地图中“单词”的计数。然后,当整个遍历结束时,签入您的主要功能,即Map中计数最高的单词。
如果您不熟悉Map数据结构,这里是快速参考。 http://www.cplusplus.com/reference/map/map/insert/
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。