打印特里树的单词

时间:2014-03-28 03:16:55

标签: recursion c

我试图在C中打印trie的内容。但是我不是很成功。并且让我在开始时说我们现在正在学校做这件事,这是一个练习。

这就是我的特里的样子:

struct node{
    char letter; //holds the letter associated with that node
    int count; //its count
    struct node* child[26]; //each node can have 26 children
};

struct trie{
    struct node* root;
};

此打印方法必须遍历此trie并按字母顺序打印单词,并且不应打印计数为0的单词。

我正在考虑递归,这就是我的代码:

void print(node* root) {
    char buffer[15];//array to store the letters
    if(root==NULL){ return;}//if the root is null return
    int i;
    int index=0; //index for the buffer
    int hasAChild=hasChild(root);

    if (hasAChild != 0) { //the root has children keep on going
        for (i=0;i<27;i++) {
            //go thru all the children and if they have children call print                         recursively
            if (hasChild(root->child[i])) {
                print(root->child[i]);
            }
            else {
                // if they have no more children add the letter to the buffer
                buffer[index++] = root->child[i]->letter;
            }
            // print the contents in the bufffer
            printf("%s: %d",root->child[i]->count);
        }
    }
}

// function to determine if a node has children, if so it returns their number if not,returns 0

int hasChild(root) {
    if(root==NULL){
        return 0;
    }

    int i;
    int count=0;
    for(i=0;i<27;i++){
        if(root->child[i]!=NULL){
            count++;
        }
    }
    return count;
}

这就是它的样子

特里的例子:

Root
  +--- a:2
  |     +--- t:4
  |
  +--- b:3
  |     +--- e:5
  |
  +--- c:0

我们有'a'2次,'at'4次','b'3次'和'be'5次,只有字应该打印出来。 在这个例子中,我将不得不打印 at:4 是:5 但不是c:0,因为它的计数是0

所以我只想打印出形成的单词,而不是不形成单词的单词。任何帮助或指导将不胜感激。谢谢!

1 个答案:

答案 0 :(得分:0)

我在这里看到三个问题:

  • 仅当当前节点没有子节点时才向当前缓冲区附加一个字母。这意味着您只会显示单词的最后一个字母。

  • 此外,每次进入该功能时,都会以空缓冲区开始。

  • 您的printf语句缺少字符串参数。

您需要传递长度和缓冲区,并确保正确地将其终止。