挿入、検索、およびこれらのstartsWith 3つの操作を含み、トライ(プレフィックスツリー)を実装します。
例:
トライトライ=新しいトライ();
trie.insert( "アップル");
trie.search( "アップル"); trueに//戻り
trie.search( "アプリケーション"); // falseに戻り
trie.startsWith( "アプリケーション"); trueに//戻り
トライ。 INSERT( "アプリケーション");
trie.search( "アプリケーションは、"); // trueを返す
説明:
あなたは、すべての入力がAZ小文字で構成されていると仮定することができます。
すべての入力が空の文字列であることを確認します。
const int型 MAXN = 26 ; // 英文字符个数 クラストライ { プライベート: トライ * 次[MAXN]。 BOOL isEnd = 偽; 公共: / * *ここにあなたのデータ構造を初期化します。* / トライ() { isEnd = 偽。 memsetの(次、0、はsizeof (次))。 } / * *トライに単語を挿入します。* / 無効のインサート(文字列単語) { 場合(word.empty()) のリターン; トライ * = CUR この ; // CUR初期化ルート のための(自動C:ワード) { IF(CUR>次に[C- ' ' ] == nullptr A)// 現在のノードがプレフィックスツリー内に存在するかどうかを { トライ・ノード= 新しい新しいトライ(); CUR - >次に[C- ' A ' ] = ノード; } CUR = CUR>次に[C- ' A ' ]; / / すべてのノードおよび次isEndあります } CUR - > = isEnd trueに ; // 現在のノードが完全な文字列有する リターン; } / * 。* ISトライにおけるIFザ・ワードを返す* / BOOL検索(文字列ワード) { IF (word.empty()) 戻り falseに、 トライ * = CUR この; のための(自動C:ワード) { IF (CUR) CUR = cur-> C-次の' A ' ]; // cはトライに存在しない場合、cur->次[C-'A「]は、A nullptrです } 返す CUR && CUR> isEndは?trueに:偽 ; // CURは空とCURに成功見つかった完全な文字列にノードを指していない } / * ソーホーで任意の単語に存在する場合*戻り値トライでいるで始まります与えられたプレフィックスは* / BOOLのstartsWith(文字列の接頭辞) { IF (prefix.empty()) リターン falseには、 自動CURは = この; のための(自動C:プレフィックス) { IF (CUR) CUR = CUR>次に[C- ' A "リターン ]。 } CUR?真:偽; } }。