2015-10-20 20 views
1

我無法打印出trie在C的話,我已經實現了trie這樣的:特里印刷用C

struct trie { 

struct trie *children[26]; 
char letter; 
int wordEnd; 

}; 


void printSubtree(struct trie *subtree) { 
    int i; 
    if (subtree == NULL){ 
     return; 
    } 
    else { 
     for (i = 0; i<26;i++) { 
      if (subtree->children[i]!= NULL) { 
       printf("%c", subtree->children[i]->letter); 
       printSubtree(subtree->children[i]); 
      } 
     } 
    } 
} 

void printResult(){ 
    struct trie *temp; 
    temp = master; 
    int i ; 
    if (temp){ 
     for (i = 0; i<26;i++) { 
      if (temp->children[i]!= NULL) { 
       printf("%c", temp->children[i]->letter); 
       printSubtree(temp->children[i]); 
       printf("\n"); 
       printf("\n"); 
      } 
     } 
    } 
} 

我知道這是不對的,但我不確定如何使用遞歸來打印出單詞。如果trie的​​和"abe"存儲爲不同的單詞,最終打印出來的只是字符串"abce",將​​和"abe"都插入爲不同的單詞。 後來,我不確定如何使用DFS打印出來,因爲不會DFS出行一路​​,印刷說了出來,再回去的"b"水平,看到"b"有一個孩子有沒有被訪問過,然後打印出來,導致字符串"abce"無論如何?

+2

你可能需要不斷表示,到目前爲止字的整串併爲您下降線索到你追加字母。當你找到一個單詞時,打印該字符串。你不能隨便打印字母,因爲它們只能打印一次,但可能屬於幾個字。 –

回答

3

一種合適的方式來打印特里結構的內容將是使用存儲在從根到當前節點的路徑中的字符的用戶定義堆棧。在每次遞歸調用中,所訪問的筆記中包含的字符被推入;在離開節點時,堆棧的頂部將被彈出。每次遞歸地到達樹的葉子時,將打印整個堆棧。如果沒有用戶定義棧用於深度優先搜索,從根到當前節點的路徑在調用棧中,這是不能被直接訪問表示只是隱含。