C - 按照频率而不是字的顺序打印字/频率BST

时间:2016-04-05 17:54:26

标签: c binary-tree binary-search-tree

我创建了一个程序,用于从文本文件中收集单词及其频率。目前我已经设法将这些单词及其频率保存在二叉搜索树中。问题是程序以字母(键)顺序打印出单词及其频率。我需要根据频率打印前100个单词。我想使用二叉搜索树,即使它不是执行此任务的最有效方式。

如果我理解正确,可以在这里使用最大堆结构,但我需要更多具体步骤继续。我对数据结构很陌生。

我的结构如下:

typedef char data_type[MAXLEN];

typedef struct bstnd {
    data_type data;
    int freq;
    struct bstnd* parent;
    struct bstnd* left;
    struct bstnd* right;
} bstnode, *pbstnode;

typedef struct bt {
    pbstnode root;
} bst;

我的主要功能如下:

int main( int argc, char* argv[] ){

bst tree;
tree.root=0;

FILE * fp;
int i=0, c=0;
char buffer[MAXLEN];
fp = fopen(argv[1], "r");

if (fp==0) {
    printf("Usage: %s [file]\n", argv[0]);
    return 0;
}
while (!feof(fp)) {
    c = fgetc(fp);

    if (isalpha(c) || c == '\'' || c == '’' || c == '‘') {
        buffer[i]=tolower(c);
        i++;
    }
    else {
        buffer[i]='\0';
        if (isalpha(buffer[0])) {
               bst_insert( &tree, buffer );
            }
            buffer[0]='\0';
            i=0;
        }
    }

    print_tree_inorder(tree);
    return 0;
    }

0 个答案:

没有答案