-1

我必须计算一个单词在二叉树中存在多少次,我不能这样做,我该怎么做?这是我的代码;

#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 文件,其中不止一次包含一些单词,我需要计算一个单词在这棵树中存在多少次。

4

1 回答 1

2

您的代码不起作用,因为您没有插入重复值。由于重复值会将 strcmp() 返回为 0,因此它们一开始就没有被添加。因此,在 insertNode() 函数中,您还需要考虑 else 情况:

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!
}

事实上,else 子句应该简单地增加计数(如“(*treePtr)->count += 1;”)。此外,请确保在 malloc TreeNode 后将初始临时结构中的值初始化为 1(如“temp->count = 1;”)。

于 2013-08-30T18:40:36.537 回答