2013-08-30 3 views
-1

Мне нужно подсчитать, сколько раз слово существует в двоичном дереве, и я не мог этого сделать, как я могу это сделать? вот мой код;Частота слов в двоичном дереве поиска в c?

#include "stdio.h" 
#include "stdlib.h" 
#include "string.h" 

struct treeNode 
{ 
    char data[20]; 
    int count; 
    struct treeNode *leftPtr, *rightPtr; 
}; 

int number = 1; 

typedef struct treeNode TreeNode; 
typedef TreeNode *TreeNodePtr; 

void insertNode(TreeNodePtr *treePtr, char word[]); 
void alphabetic(TreeNodePtr treePtr); 

int main() 
{ 
    /*reading strings from the file and add them to the tree*/ 

    char first[20]; 
    FILE *fp1; 
    TreeNodePtr rootPtr = NULL; 
    int c; 
    fp1 = fopen("output.txt", "r"); 
    do 
    { 
    c = fscanf(fp1, "%s", first); 

    if (c != EOF) 
    { 

     insertNode(&rootPtr, first); 

    } 
    } while (c != EOF); 

    fclose(fp1); 
    printf("%s", rootPtr->rightPtr->leftPtr->data); 
    //alphabetic(rootPtr); 

    system("PAUSE"); 
} 

/*for adding nodes to tree*/ 

void insertNode(TreeNodePtr *treePtr, char word[20]) 
{ 
    TreeNode *temp = NULL; 
    if (*treePtr == NULL) 
    { 
    temp = (TreeNode *) malloc(sizeof(TreeNode)); 
    temp->leftPtr = NULL; 
    temp->rightPtr = NULL; 
    strcpy(temp->data, word); 

    *treePtr = temp; 
    } 
    else if (strcmp(word, (*treePtr)->data) < 0) 
    { 
    insertNode(&((*treePtr)->leftPtr), word); 
    } 
    else if (strcmp(word, (*treePtr)->data) > 0) 
    { 

    insertNode(&((*treePtr)->rightPtr), word); 
    } 
} 

/*traverse the tree*/ 

void alphabetic(TreeNodePtr treePtr) 
{ 
    if (treePtr != NULL) 
    { 
    alphabetic(treePtr->leftPtr); 

    printf("%s\n", treePtr->data); 

    alphabetic(treePtr->rightPtr); 
    } 
} 

У меня есть .txt файл, который содержит несколько слов больше, чем один раз, и мне нужно, чтобы подсчитать, сколько раз такое слово в этом дереве.

+0

Считайте их. У вас уже есть узел 'count'. Просто используйте его. – alk

+0

Btw: 'int main()' должен возвращать 'int'. – alk

+0

Я попытался использовать его temp-> count ++; но это не сработало, как я могу его использовать? – user2733502

ответ

2

Ваш код не работает, потому что вы не вставляете повторяющиеся значения. Поскольку повторяющиеся значения возвращают strcmp() как 0, они не добавляются в первую очередь. Таким образом, в функции insertNode(), вам нужно будет рассмотреть случай, еще и:

else if (strcmp(word, (*treePtr)->data) < 0) { 
    insertNode(&((*treePtr)->leftPtr), word); 
} else if (strcmp(word, (*treePtr)->data) > 0) { 
    insertNode(&((*treePtr)->rightPtr), word); 
} else { 
    //This is where the duplcate values should be inserted! 
} 

В самом деле, предложение еще нужно просто увеличивать количество, как и в (как в «(* treePtr) -> счетчик + = 1; "). Кроме того, убедитесь, что вы инициализируете значение 1 в исходной структуре temp после того, как вы malloc TreeNode (как в «temp-> count = 1;»).

+0

большое вам спасибо! Мой код работает сейчас :) – user2733502

Смежные вопросы