1

私は現在、二分木と二分探索木について学んでいます。私が取り組んでいる演習の 1 つは、テキスト ファイルを読み取り、各単語を二分木にアルファベット順に格納し、さまざまな方法で木をトラバースすることです。正確な仕様は次のとおりです。

テキストを読み取り、テキスト内のすべての単語 (アルファベット順) で構成される二分探索木を構築し、単語を保存して、単語の頻度 (各単語がテキストに出現する回数) のカウントをノードに保持します。クラスで言及されているツリー トラバーサルを実行します。

私の質問は、単語をツリーに追加するときに単語の頻度を追跡するにはどうすればよいですか? クラスで同一のノードを取り上げたことがないので、ここで立ち往生しています。どんな提案でも大歓迎です!

4

5 に答える 5

3

単純。二分木ノードは、文字列 (キーなど) と整数カウント (値など) の 2 つの要素で構成されます。要素を追加するときに、要素が既に存在するかどうかを確認します。存在する場合は単純にカウントを増やします。それ以外の場合は、要素をカウント 1 の新しいバイナリ ツリー ノードとして追加します。

于 2012-04-08T21:21:16.013 に答える
2

宿題の質問に答えるのがむずかしい...

したがって、ノードは明らかに、それが表す単語を保持します。新しい単語を挿入するとノードが作成されますが、その前に単語を検索します。単語のノードがツリーに既に存在する場合は、単純にノードを取得して、その中のカウンターを増やします。

public class MyNode
{
   String word;
   Integer counter;
}

それを得る?:)

于 2012-04-08T21:20:50.200 に答える
0

単語をツリーに追加するときに単語の頻度を追跡するにはどうすればよいですか

1)data leftおよびrighta のメンバーに加えてTreeNode、別のメンバーcountを追加し、ツリーに既存の単語を追加しようとするたびに 1 ずつ増やします。

2) 別のハッシュ テーブルを使用して、単語と出現のマッピングを保持できます。単語がハッシュ テーブルに存在する場合は、カウントをインクリメントします。存在しない場合は、ツリーに追加します。ハッシュテーブルのため、これには余分なスペースが必要です

于 2012-04-08T21:20:27.000 に答える
0

HashMap を使用し、文字列、整数で埋めます。テキスト内の単語を反復処理し、まだ追加されていない場合は Integer(occurrence) == 1 でマップに配置します。以前に追加された場合は、Integer を 1 で増やします。

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

于 2012-04-08T21:23:21.877 に答える