我有一个从文本文件中弹出的二叉搜索树
当我显示bst时,它是这样的
the
in was
Minnesota it -- --
-- -- -- stomach -- -- -- --
-- -- -- -- -- -- only -- -- -- -- -- -- -- -- --
我用这个方法从这个搜索树中的数组中搜索一个单词,如果这个数组中的单词存在于二叉搜索树中,它就会把它搜索出来
public boolean contains(String d)
{
BSTNode p = root;
// Not contained if specified string is null
if (d == null)
return (false);
// OK if specified string equals our data
if ((p.data != null) && p.data.equals(d))
return (true);
// OK if contained in left tree
if ((p.left != null) && p.left.contains(d))
return (true);
// OK if contained in right tree
if ((p.right != null) && p.right.contains(d))
return (true);
// Otherwise, it's not OK
return (false);
}
包含bstnode类中的方法
public boolean contains(String item) {
int comp = item.compareTo(data);
if(comp == 0) return true;
if(comp < 0 && left != null && left.contains(item)) return true;
if(comp > 0 && right != null && right.contains(item)) return true;
// no matching node was found
return false;
}
我主要是这样用的
for (int i = 0; i < len; i++) {
t = array[i];
if (btree.contains(array[i]) == true) {
System.out.println(t);
}
}
输出
was
in
it
was
the
only
the
the
was
in
in
the
the
the
was
only
the
我怎么能这样输出
仅限:2
是:4
信息技术:1
输入:3
答案:7
...
所以我对代码的理解是,它将每个节点中的所有单词分开检查,而不是在所有节点中搜索一个单词然后移到下一个单词,这样我就得到了这个输出,如果我错了,请纠正我。
希望有人能帮忙!
3条答案
按热度按时间wlwcrazw1#
较不具侵入性的方法是收集以下文字:
打印单词/频率:
或者,直接添加到Map:
如果知道字符串已经在bst上,则更有效的方法是不要再次搜索它。例如:
6mw9ycah2#
我认为有几点不对劲:
根据定义,bst不能有重复项。每个左节点必须小于根节点;每个右节点必须大于根节点。
先在树的左边搜索。您有些忽略了bst的好处。当前,对于大于根的数据,您的程序将开始搜索左侧节点。然后,程序将搜索左侧节点的最右边的树。只有这样,它才会返回到包含的主类,并从根的右侧继续搜索。
解决方案1:将字符串 Package 到一个类中,该类包含一个整数,如果要添加的新字符串是重复的,则可以递增该整数。
解决方案2:之后
只是
iyr7buue3#
不完全确定bst是如何设置的,但是您可以首先创建一个hashmap并执行遍历和更新每个事件。
看看这样的方法