在二叉搜索树中查找最常见的单词

问题描述

我正在编写一个函数,以在二叉搜索树中输出最常见的单词,但它会按字母顺序而不是最常见的单词在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/

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...