Java 在未排序的二叉树中搜索字符串
我不确定我需要做什么来搜索存储在二叉树中的字符串。我已经编写了搜索方法,但我不太明白如何传递它。我需要先搜索字符串,然后再将其添加到树中。如果找到了,我只需要增加节点对象中的计数器,而不是添加一个新的计数器。顺便说一下,这棵树没有分类 我的问题是如何在添加之前搜索它Java 在未排序的二叉树中搜索字符串,java,binary-tree,binary-search-tree,Java,Binary Tree,Binary Search Tree,我不确定我需要做什么来搜索存储在二叉树中的字符串。我已经编写了搜索方法,但我不太明白如何传递它。我需要先搜索字符串,然后再将其添加到树中。如果找到了,我只需要增加节点对象中的计数器,而不是添加一个新的计数器。顺便说一下,这棵树没有分类 我的问题是如何在添加之前搜索它 System.out.println("Enter string to be stored"); stringValue = k.nextLine(); if (theString.isEmpty() == true) {
System.out.println("Enter string to be stored");
stringValue = k.nextLine();
if (theString.isEmpty() == true) {
node.add(stringValue, count);
} else {
// I am not sure what to do here
// How do I send the string to my search method?
stringValue.treeSearch();
}
我将搜索方法更新为此
public Node treeSearch(String s, Node root){
if(root.toString().equals(s)){
return root;
}
if(left != null){
left.treeSearch(s, root.left);
return root;
}
if(right != null){
right.treeSearch(s, root.right);
return root;
}else{
return null;
}
}
在搜索左、右子树的方式中存在错误。例如:
if (left != null) {
left.treeSearch(s, root.left);
if (root.toString().equals(s)) {
return root;
}
}
所以。。。搜索左子树,但忽略搜索结果,并将s
与根进行比较。。。再说一遍
对于右侧子树,重复相同的模式
(因为这闻起来像是一个“学习练习”,我让你自己来解决这个问题。)
话虽如此,如果不对二叉树的元素进行排序,它作为数据结构几乎毫无用处。最好将元素存储在列表或数组中。(您的treeSearch
的复杂性是O(N)
…就像搜索列表或数组一样。)您正在查找字符串,因此将要查找的字符串传递给方法。您的treeSearch()
方法在哪里实现?根据treeSearch
方法的签名,您需要传递String
以搜索树的根并节点
对象。否。不对。searchTree方法应该返回包含找到的元素的节点。。。你把问题编辑成这样做了一件坏事。现在大多数人都不知道你最初的问题是关于什么的。那么你是说不管发生什么,它每次都应该返回节点,而我应该在别处进行比较?你的评论不清楚。但我很确定这不是我要说的。我应该在哪里进行比较?我正在搜索一个特定的字符串,因此如何知道该方法是否找到它?我想我有这样一个:如果根是字符串,返回根。如果左边的If不为空,则搜索它,如果根等于字符串,则返回它。右边也是一样。我发布的更新方法似乎可以搜索并返回每个节点。我应该在哪里进行比较以查看我正在搜索的字符串是否等于当前正在搜索的字符串?好的,回答这个问题。如果对root.left
子树的搜索成功,是要返回在子树中找到的节点,还是要返回root
?
if (left != null) {
left.treeSearch(s, root.left);
if (root.toString().equals(s)) {
return root;
}
}