タイトル説明
トライ実装 insert
、 search
および startsWith
方法を。
効果の対象に
挿入、検索、およびツリーへの前奏曲の動作を実現して下さい。
(各ツリーノードは、ノードが表すルートからリーフまでの小文字、完全な単語を表します。)
例
E
問題解決のためのアイデア
おかげで提供さLeetcodeする@ cxq1992、より完全な記録保持と操作ツリーノードを設計する方法を考えます。
複雑性分析
時間の複雑さ:O(NULL)
宇宙複雑:O(NULL)
コード
クラスノード{ パブリック: ノード():ヴァル(' ')、終了(偽)、共有(0 ){} ノード(チャー C):valを(C)、終了(偽)、共有(0 ){} ノード * subchild(char型C){ 場合(!child.empty()){ のための(自動カイ:子){ 場合(カイ>ヴァル== c)に 戻りカイ。 } } 戻りNULL。 } 〜ノード(){ 以下のため:(チャイルドオートチ) 削除し、カイが } // ノードツリー記憶されている小文字 チャーヴァルを; // ノードがリーフノードであるか否かを BOOL END; // 子ノードの数は、 int型の共有と、 // サブノードが保持している ベクトル<ノード*> ;子供を }; クラストライ{ パブリック: / * 。*ここにあなたのデータ構造の壁紙を初期化する* / トライ(){ ルート = 新しい新しいノード(); } / * 。*トライに挿入数A Wordの*を/ 無効 INSERT(ストリング・ワード){ 場合(検索(単語)) のリターン; ノード * CUR = ルート。 用(チャーC:ワード){ ノード * TMP = cur-> subchild(C); もし(TMP == NULL){ TMP = 新しいノード(C)。 CUR - > child.push_back(TMP); CUR = TMP; } 他{ CUR = TMP。 } ++ cur->共用。 } CUR - >端= 真。 } / * 単語がトライしている場合は*を返します。* / BOOL検索(ストリング・ワード){ ノード * TMP = ルート; 用(チャーC:ワード){ TMP = tmp-> subchild(C); もし(TMP == NULL)を 返します 偽。 } 戻り tmp-> END; } / * *指定された接頭辞で始まるトライで任意の単語がある場合を返します。* / BOOLのstartsWith(文字列の接頭辞){ ノード * TMP = ルート; 用(チャーC:プレフィックス){ TMP = tmp-> subchild(C); もし(TMP == NULL)を 返します 偽。 } を返す 真。 } プライベート: ノード *のルート。 }。 / * * *あなたのトライオブジェクトをインスタンス化し、などと呼ばれます: *トライ* OBJ =新しいトライ(); * obj->(単語)を挿入。 * BOOL PARAM_2 = obj->検索(単語)。 * BOOL param_3 = obj->のstartsWith(接頭辞)。 * /