Java 使用二叉树跟踪词频

Java 使用二叉树跟踪词频,java,binary-tree,word-frequency,Java,Binary Tree,Word Frequency,我目前正在学习二叉树和二叉搜索树,其中一个练习是阅读文本文件,按字母顺序将每个单词存储在二叉树中,并使用不同的方法遍历树。 具体规格如下: 读入文本并构建包含文本中所有单词(按字母顺序)的二叉搜索树,存储单词并在节点中记录单词的频率(每个单词在文本中出现的次数),并执行类中提到的树遍历 我的问题是,当我将一个单词添加到树中时,如何跟踪它的频率?我们从来没有在课堂上讨论过相同的节点,所以我被困在这里。任何建议都将不胜感激 当我将一个单词添加到列表中时,如何跟踪它的频率 树 1) 除了数据左和右树节

我目前正在学习二叉树和二叉搜索树,其中一个练习是阅读文本文件,按字母顺序将每个单词存储在二叉树中,并使用不同的方法遍历树。 具体规格如下:

读入文本并构建包含文本中所有单词(按字母顺序)的二叉搜索树,存储单词并在节点中记录单词的频率(每个单词在文本中出现的次数),并执行类中提到的树遍历

我的问题是,当我将一个单词添加到树中时,如何跟踪它的频率?我们从来没有在课堂上讨论过相同的节点,所以我被困在这里。任何建议都将不胜感激

当我将一个单词添加到列表中时,如何跟踪它的频率 树

1) 除了
数据
树节点的成员之外,添加另一个成员
计数
,并在每次尝试在树中添加现有单词时递增1

2) 您可以使用一个单独的哈希表来保持单词和事件的映射。如果该单词存在于哈希表中,只需增加计数。如果不存在,则将其添加到树中。由于哈希表的原因,这需要额外的空间

当我将一个单词添加到列表中时,如何跟踪它的频率 树

1) 除了
数据
树节点的成员之外,添加另一个成员
计数
,并在每次尝试在树中添加现有单词时递增1


2) 您可以使用一个单独的哈希表来保持单词和事件的映射。如果该单词存在于哈希表中,只需增加计数。如果不存在,则将其添加到树中。这需要额外的空间,因为哈希表回答家庭作业问题很棘手

因此,你的节点显然会保存它所代表的单词。插入新词时,即创建节点,但在插入新词之前,先搜索该词。如果单词的节点已经存在于树中,只需检索该节点并在其中增加一个计数器

public class MyNode
{
   String word;
   Integer counter;
}

明白了吗?:)

回答家庭作业问题很难

因此,你的节点显然会保存它所代表的单词。插入新词时,即创建节点,但在插入新词之前,先搜索该词。如果单词的节点已经存在于树中,只需检索该节点并在其中增加一个计数器

public class MyNode
{
   String word;
   Integer counter;
}

明白了吗?:)

简单。二叉树节点由两个元素组成,一个是字符串(比如键),另一个是整数计数(比如值)。在添加元素时,检查元素是否已经存在,如果是,则只需增加计数,否则将元素添加为新的二叉树节点,计数为1

简单。二叉树节点由两个元素组成,一个是字符串(比如键),另一个是整数计数(比如值)。在添加元素时,检查元素是否已经存在,如果是,则只需增加计数,否则将元素添加为新的二叉树节点,计数为1

使用HashMap,用字符串、整数填充它。迭代文本中的单词,如果尚未添加,则将其放入整数(出现)==1的映射中。如果之前已添加,请将整数增加为1


处理完所有文本后,例如,您可以使用字符串和整数填充列表中的对象,并根据其比较方法对其进行排序。

使用哈希映射,使用字符串和整数填充列表。迭代文本中的单词,如果尚未添加,则将其放入整数(出现)==1的映射中。如果之前已添加,请将整数增加为1


当处理所有文本时,例如,可以用字符串和整数填充一个对象列表,然后根据它们的compareTo方法对它们进行排序。

如果有需要的人

scala BST容器的一个实现

trait BSTree[+A]
案例对象为空扩展BSTree[无]
案例类节点[+A](左:BSTree[A],x:A,右:BSTree[A])扩展了BSTree[A]
对象树{
def插入[T](T:B树[T],k:T)(
隐式ord:T=>Ordered[T]
):b树[T]=T匹配{
case Empty=>Node(空、k、空)
如果k节点(插入(l,k),x,r),则案例节点(l,x,r)
如果k==x=>Node(l,k,r),则案例节点(l,x,r)
案例节点(l,x,r)=>节点(l,x,insert(r,k))
}
def toList[T](T:BSTree[T]):List[T]=T匹配{
大小写为空=>Nil
//前序遍历
案例节点(l,x,r)=>x::toList(l)++toList(r)
}
def apply[T](as:T*)(隐式ord:T=>Ordered[T]):BSTree[T]=as.foldLeft(
空:b树[T])((T,e)=>插入(T,e))
}
对象主应用程序{
case类WordCount(c:Char,var count:Int){
重写def toString:String=s“'$c'->$count”
}
隐式def wordCountConvert(x:WordCount):有序[WordCount]=
(即:字数)=>如果(x.c.1,'c'->1,'c'->1,'a'->2,'a'->1,'l'->2,'o'->2,'l'->1,'o'->1)

如有需要,请参见示例

scala BST容器的一个实现

trait BSTree[+A]
案例对象为空扩展BSTree[无]
案例类节点[+A](左:BSTree[A],x:A,右:BSTree[A])扩展了BSTree[A]
对象树{
def插入[T](T:B树[T],k:T)(
隐式ord:T=>Ordered[T]
):b树[T]=T匹配{
case Empty=>Node(空、k、空)
如果k节点(插入(l,k),x,r),则案例节点(l,x,r)
如果k==x=>Node(l,k,r),则案例节点(l,x,r)
案例节点(l,x,r)=>节点(l,x,insert(r,k))
}
def toList[T](T:BSTree[T]):List[T]=T匹配{
大小写为空=>Nil
//前序遍历
案例节点(l,x,r)=>x::toList(l)++toList(r)
}
def apply[T](as:T*)(隐式ord:T=>Ordered[T]):BSTree[T]=as.foldLeft(
空:b树[T])((T,e)=>插入(T,e))
}
对象主应用程序{