揚聲器1:讓我們給 該解決方案一試。 因此,讓我們來看看我們什麼 結構節點的樣子。 在這裡,我們看到了我們將有一個 布爾字和一個結構節點明星 兒童括起來的字母。 所以,第一件事情你可能想知道, 為什麼字母散列定義為27? 好了,記住,我們將需要 待處理的單引號,所以 這將是一個有點特殊 情況下整個程序。 好了,現在請大家記住一個 特里的實際工作。 比方說,我們正在索引字貓, 然後從我們的Trie樹的根, 我們要看看孩子 數組,我們要看看 對應於字母索引 C.因此,這將是指數2。 因此考慮到,這將給予我們 一個新的節點,然後我們將 從該節點工作。 所以,有了這個節點,我們再次 去看看孩子陣列, 而且我們要看看指數為零 對應於貓在A。 這樣的話,我們會去到該節點, 並給予該節點,我們要 看對應的索引處 到T和移動到該節點, 最後,我們已經完全看 通過我們的字貓,現在布爾 單詞應該表明是否 這個給定的字實際上是一個字。 那麼,為什麼我們需要這種特殊情況? 那麼,如果這個詞災難 在我們的字典,但 字貓是不是? 所以想看看,如果這個詞是貓 在我們的字典,我們要 成功地翻閱索引 C-A-T和到達一個節點,但是這 只是因為災難發生在 從C-A-T的方式創建所有的節點 一直到單詞的末尾。 所以布爾字是用來說明是否 這個特殊的位置,實際上 表示一個字。 好了,所以現在我們知道什麼是 特里是怎麼回事的樣子,讓我們來看看 在負載功能。 因此,負載將會返回一個布爾 對於我們是否成功 加載失敗字典和 這將是字典 我們要加載。 我們將這樣做第一件事就是打開 了那本詞典閱讀。 我們必須確保我們沒有失敗, 因此,如果在字典不 成功打開,它將返回 不,在這種情況下,我們要 返回False。 但假設它成功 開了,那麼我們就可以真正閱讀 通過字典。 我們將這樣的第一件事 想要做的是我們有這個 全局變量的根。 現在,根將是一個節點明星。 這是我們的Trie樹的頂部,我們是 將要逐一查看。 我們會想這樣的第一件事 做的是為我們的根分配內存。 請注意,我們使用了釋放calloc 功能,這是基本相同 作為malloc函數,除了它的 保證返回的東西是 完全歸零。 因此,如果我們使用的malloc,我們需要 通過所有的指針我們 節點,並確保 它們都是空。 所以釋放calloc會替我們。 現在,就像malloc的,我們需要做 確保分配實際上 成功的。 如果返回null,那麼我們 需要關閉我們的字典 文件並返回False。 因此,假如被分配 成功,我們將使用一個節點 明星游標來遍歷 通過我們的特里。 因此,我們的根永遠不會改變, 但我們要使用游標來 實際上去從一個節點到另一個節點。 好吧,所以在這個For循環中,我們 通過字典文件讀取, 我們正在使用的龜etc。 所以龜etc是要搶單 字符從該文件。 我們要繼續抓 雖然我們不到達的字符 該文件的結束,所以有 2箱子我們需要處理。 第一,如果該字符不是 新的生產線,所以我們知道,如果它是一個新的 行,那麼我們將要 移動到一個新詞。 但假設它不是一個新行,然後 在這裡,我們想弄清楚的 指數我們要索引 兒童數組中 我們看著面前。 所以,就像我之前說的,我們需要 特殊情況下的單引號。 我們使用三元運算符通知 在這裡,所以我們要讀 這好像我們在閱讀的字符是 一個單引號,那麼我們要 設置索引等於減去字母 1,這將是該指數26。 否則,如果它不是一個單引號, 然後我們要設置索引 等於c減去一個。 所以請記住從以前的p設置回來, Ç減去一個是要給我們 C的按字母順序排列的位置,所以如果 c是字母A,這將 給我們指數為零。 對於字母B,它會給 我們的索引1,依此類推。 因此,這給了我們中的索引 兒童陣列,我們想要的。 現在,如果該指數是目前在空 兒童陣列,這意味著 節點當前不存在從 這條道路,所以我們需要分配一個 節點的路徑。 這就是我們在這裡做的。 所以,我們要再次,使用釋放calloc 功能,使我們不必 零出所有的指針,而我們, 再次,需要檢查釋放calloc 沒有失敗。 如果釋放calloc會失敗,那麼我們就需要 卸載一切,我們關閉 字典,並返回False。 因此,假如它沒有出現故障,則 這為我們創建一個新的子, 然後我們會去那個孩子。 我們的光標會遍歷 下到那個孩子。 現在,如果這不是空,首先, 然後將光標可以只遍歷 下到那個孩子沒有實際 不必分配任何東西。 這是我們第一次發生的情況 分配的字貓,和 這意味著當我們去分配 災​​難中,我們並不需要創建 再次為C-A-T的節點。 它們已經存在。 好了,這是什麼東西? 這是其中c是條件 反斜杠N,其中c是一個新行。 這意味著我們已經成功 完成了一個字。 現在,我們想要做的,當我們 成功地完成了一個字? 我們將用這個詞場 我們的內部結構體的節點。 我們要設置為True,這樣, 表明該節點表示一個 成功的話實際字。 現在,設置為True。 我們要重設我們的光標點 在特里的開始了。 最後,增加我們的字典 大小,因為我們發現了另一個字。 好吧,所以我們要繼續做 即,通過讀取字符 字符,興建新節點 我們的Trie樹和在每個字 字典,直到我們終於到達C 等於EOF,在這種情況下,我們分手吧 出來的文件。 現在,有下2案件 我們可能EOF打擊。 如果有錯誤,首先是 從文件中讀取的,所以如果有 的錯誤,我們需要做的典型 卸載一切,關閉文件, 返回False。 假設沒有了一個錯誤,該 只是意味著我們實際上打的結尾 的文件,在這種情況下,我們關閉 文件,並返回True,因為我們 成功載入字典 進入我們的特里。 好吧,那麼現在讓我們來 退房入住。 縱觀檢查功能,我們看到 該檢查將要返回一個布爾值。 如果這個詞,它是它返回True 傳遞是在我們的特里。 它,否則返回False。 那麼我們如何來判斷是否 這個詞在我們的特里? 我們在這裡看到的是,就像以前一樣, 我們將使用游標來遍歷 通過我們的特里。 現在,在這裡,我們要遍歷 在我們的整個字。 所以遍歷我們的字 過去了,我們要確定 索引的兒童陣列 對應詞支架I。 因此,這是要完全一樣 負載,其中,如果字架我是一個 單引號,那麼我們要使用索引 字母減去1,因為我們確定 那就是我們要去的地方 存儲單引號。 否則我們將要使用的tolower 字架我。 所以請記住這個詞可以有任意的 資本化,所以我們 要確保我們使用 一個小寫版本的東西。 然後從該小寫減 一來,再次給我們 按字母順序排列的位置 該角色。 所以這將是我們的索引 到兒童陣列。 而現在,如果該索引到兒童 數組為null,這意味著我們 不能再繼續迭代 下來我們的特里。 如果是這樣的話,這個詞不能 可能是在我們的特里,因為如果它 是,這將意味著會有一個 小路下到那個字,你會 從來沒有遇到空。 所以遇到空,我們返回False。 的字不在字典中。 如果它不為null,那麼我們要 繼續迭代,所以我們要 更新我們的光標指向 該指數在特定節點。 因此,我們繼續在整個這樣做 整個字。 假設我們從來不打空,那手段 我們能夠打通整個 世界,發現在我們的特里一個節點, 但我們還沒有完全完成。 我們不希望只是返回True。 我們要返回游標錯誤字 因為,記得再次,如果貓是不是 在我們的字典和災難是, 那麼我們將成功打通 字貓,但光標字 將虛假和不正確的。 所以我們返回游標字來表示 是否該節點實際上是一個字, ,就是這樣的檢查。 因此,讓我們看看大小。 所以,大小將是很容易 因為,記得在負載,我​​們 遞增的字典大小 我們遇到的每一個字。 因此,尺寸只是要返回 字典大小,僅此而已。 好吧,那麼最後,我們有卸載。 所以卸載,我們將使用 遞歸函數實際上做 對於我們,所以我們的函數的工作 將被稱為卸料。 什麼是卸荷怎麼辦? 我們在這裡看到了卸荷是要 遍歷所有的兒童在 這個特定的節點,並且如果子 節點不為空,那麼我們要 卸的子節點。 所以,這是怎麼回事遞歸 卸載所有我們的孩子。 一旦我們確定我們的孩子 已經卸載,那麼我們 可以釋放自己,所以卸載我們自己。 因此,這將遞歸卸載 整個特里,然後一旦這 完成後,我們可以只返回True。 卸載不能失敗,我們 剛解放的東西。 所以一旦我們完成了解放 一切,返回True。 就是這樣。 我的名字是羅布,這 是[聽不清]。