2012-04-08 17 views
1

私は現在、バイナリツリーとバイナリ検索ツリーについて学習しています。私が取り組んでいる練習の1つは、テキストファイルを読み込み、各単語をアルファベット順にバイナリツリーに格納し、さまざまな方法を使用してツリーをトラバースします。数(バイナリツリーを使って単語の頻度を追跡する

読むテキスト内の単語を格納し、単語の頻度のカウントを保持、(アルファベット順ベース)テキスト内のすべての単語を含んで成る二分探索木を構築する:ここで は正確な仕様は、各単語がテキスト内に現れる回数)をノード内に定義し、クラス内で言及されるツリートラバーサルを実行します。

私の質問は、単語の頻度をツリーに追加するときにどのように追跡することができますか?私たちは決してクラス内の同じノードをカバーしていないので、私はここで立ち往生しています。どんな提案も感謝しています!

答えて

3

シンプルです。バイナリツリーノードは、文字列(キー)と整数(数値)の2つの要素で構成されます。既に存在するかどうかの要素チェックを追加している場合は、単にcountをインクリメントし、それ以外の場合は要素を1の数を持つ新しいバイナリツリーノードとして追加します。

0

私は ツリー

1)にそれを追加しているとき、どのように私はTreeNodedataleftrightメンバーのほかに単語の頻度を追跡することが可能で、他のメンバーcountと増分を追加あなたがツリーに既存の単語を追加しようとするたびに1。

2)別のハッシュテーブルを使用して、単語と発生のマッピングを維持することができます。単語がハッシュテーブルに存在する場合は、カウントを増加させるだけです。存在しない場合はツリーに追加します。これは、ハッシュテーブルに余分なスペースを必要とし

2

トリッキー留守番宿題の質問...

だから、あなたのノードは明らかにそれが表現された単語を開催します。新しい単語を挿入するとノードが作成されますが、その前にその単語を検索します。単語のノードがツリーにすでに存在する場合は、単にノードを取得してその中のカウンタを増やすだけです。

public class MyNode 
{ 
    String word; 
    Integer counter; 
} 

:)

0

HashMapを使用してString、Integerを入力します。テキスト内の単語を繰り返し、まだ追加されていなければInteger(オカレンス)== 1でマップに入れます。以前に追加された場合は、整数を1で増やしてください。

すべてのテキストが処理されると、たとえば、StringおよびIntegerを持つオブジェクトを含むリストをfillToメソッドに従って並べ替えることができます。

+0

OPはBSTを学習しており、ハッシュテーブルに関連する回答を与えていますか?真のハッシュテーブルはO(1)平均のケースですが、ツリーの代わりにはありません。 – Yavar

+0

は正常に動作します – Tom

関連する問題