達成トライ(接頭辞木)

挿入、検索、およびこれらの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?; 
    } 
}。

 

おすすめ

転載: www.cnblogs.com/tianzeng/p/11565067.html