我不确定我需要做什么才能搜索存储在二叉树中的字符串。我有写的搜索方法,但我不太清楚要传递什么。我需要先搜索字符串,然后再将其添加到树中。如果找到,我只需要在节点对象中增加计数器而不是添加新计数器。顺便说一下,这棵树是未分类的。
我的问题是如何在添加之前搜索它?
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, TreeNode root){
if(root.toString().equals(s)){
return root;
}
if(left != null){
left.treeSearch(s, root.left);
if(root.toString().equals(s)){
return root;
}
}
if(right != null){
right.treeSearch(s, root.right);
if(root.toString().equals(s)){
return root;
}
}else{
return null;
}
}
我将搜索方法更新为此。
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;
}
}
答案 0 :(得分:1)
您搜索左右子树的方式存在错误。例如:
if (left != null) {
left.treeSearch(s, root.left);
if (root.toString().equals(s)) {
return root;
}
}
所以...你搜索左子树,但忽略搜索结果并再次将s
与root
进行比较。
对于正确的子树重复相同的模式。
(因为这有点像“学习练习”,我会让你弄清楚修复。)
话虽如此,如果你不订购二叉树的元素,它作为数据结构几乎是无用的。最好将元素存储在列表或数组中。 (treeSearch
的复杂性为O(N)
...就像搜索列表或数组一样。)