2011-06-14 9 views
2

私は基本的なプレフィックスツリーまたは "trie"を実装しました。トライは、このようなノードで構成されています基本プレフィックスツリーの実装に関する質問

// pseudo-code 
struct node { 
    char c; 
    collection<node> childnodes; 
}; 

は、私は私のトライに次の単語を追加言う:「アップル」、「箱舟」と「猫」。今、私が "Ap"や "Ca"のような接頭辞を検索すると、私のtrieの "bool containsPrefix(string prefix)"メソッドが正しくtrueを返します。

"Cat"と "Ark"ではtrueを返しますが、上記の例では "App"ではfalseを返すメソッド "bool containsWholeWord(string word)"を実装しています。

トライのノードで「endOfWord」フラグを使用するのは一般的ですか?これは、ルックアップされている文字列が実際にプレフィックスだけでなくトライに入力された単語であるかどうかを判断するのに役立ちます。

乾杯!

答えて

1

「App」と「Apple」の両方を保存する必要があり、「Appl」は保存しない場合は、endOfWordフラグが必要です。

また、同じ文字を持つ2つのノードを(時々)使用してデザインに合わせることもできます。したがって、 "Ap"は子ノードに属していなければなりません。リーフノード "p"と内部ノード "p"に子 "l"があります。

2

通常、キーの終わりはリーフノードで示されます。

  • 子ノードは空です。または
  • あなたは、キーのプレフィックスといくつかの子ノードを持つ枝を持っています。

デザインにリーフ/空のノードがありません。例:ヌル

+0

お返事ありがとうございます。しかし私は空のchildnodesコレクション(あなたが言及したように)をチェックすることによって葉ノードを示すことを試みました。これは、次の問題を解決しません。トライに「Apple」を挿入します。トライに「Appl」を挿入します。 「アップル」が言葉全体であるかどうか質問する。この例では、(上記の方法でリーフノードをチェックしていると仮定して) "l"はリーフノードではないため、 "Appl"が完全な単語であるかどうかを尋ねると、誤ってfalseが返されます。 "endOfWord"フラグを追加するとこれが修正されます。 – MrDatabase

関連する問題