Java 字符串二叉搜索树
我的二叉搜索树有问题。在添加所有字符串值后,我可以搜索我以前搜索过的内容。但是,它无法检索存储在tree.right(或tree.left)中的值。即使my tree.right具有该值,但当我搜索它时,它将返回“Record Not Found”。输出和代码如下所示:Java 字符串二叉搜索树,java,binary-tree,Java,Binary Tree,我的二叉搜索树有问题。在添加所有字符串值后,我可以搜索我以前搜索过的内容。但是,它无法检索存储在tree.right(或tree.left)中的值。即使my tree.right具有该值,但当我搜索它时,它将返回“Record Not Found”。输出和代码如下所示: public void add(String value) { if(value.toLowerCase().equals("red") || value.toLowerCase().equals("gree
public void add(String value) {
if(value.toLowerCase().equals("red") || value.toLowerCase().equals("green") || value.toLowerCase().equals("blue") ||
value.toLowerCase().equals("yellow") || value.toLowerCase().equals("black")) {
if (root == null) {
root = new StringTreeNode(value.toLowerCase());
size ++;
}
else
addleaf(root, value.toLowerCase());
}
}
public void addleaf(StringTreeNode branch, String value) {
if(value.compareTo(branch.data) < 0) {
if (branch.left == null) {
branch.left = new StringTreeNode(value);
size ++;
} else
addleaf(branch.left, value);
} else if (value.compareTo(branch.data) > 0) {
if (branch.right == null) {
branch.right = new StringTreeNode(value);
size ++;
} else
addleaf(branch.right, value);
} else {
}
}
public void searchNode (String value) {
found = false;
if(root == null)
System.out.println("Nothing here");
else
searchBranch(root, value.toLowerCase());
if (!found)
System.out.println("Records not found.");
}
public void searchBranch (StringTreeNode tmp, String value) {
if(value.equals(tmp.data)) {
System.out.println("Records found, " + value + " exist in search history!");
found = true;
} else if (tmp.left != null)
searchBranch(tmp.left, value);
else if (tmp.right != null)
searchBranch(tmp.right, value);
}
public void add(字符串值){
如果(value.toLowerCase().equals(“红色”)| | value.toLowerCase().equals(“绿色”)| | value.toLowerCase().equals(“蓝色”)|
value.toLowerCase().equals(“黄色”)| | value.toLowerCase().equals(“黑色”)){
if(root==null){
root=新的StringTreeNode(value.toLowerCase());
大小++;
}
其他的
addleaf(root,value.toLowerCase());
}
}
公共void addleaf(StringTreeNode分支,字符串值){
if(值比较到(分支数据)<0){
if(branch.left==null){
branch.left=新StringTreeNode(值);
大小++;
}否则
addleaf(branch.left,value);
}else if(value.compareTo(branch.data)>0){
if(branch.right==null){
branch.right=新StringTreeNode(值);
大小++;
}否则
addleaf(branch.right,value);
}否则{
}
}
公共无效搜索节点(字符串值){
发现=错误;
if(root==null)
System.out.println(“此处无任何内容”);
其他的
searchBranch(根,value.toLowerCase());
如果(!找到)
System.out.println(“未找到记录”);
}
公共无效搜索分支(StringTreeNode tmp,字符串值){
if(值等于(tmp数据)){
System.out.println(“找到记录,+value+”存在于搜索历史记录中!”);
发现=真;
}else if(tmp.left!=null)
searchBranch(tmp.left,value);
else if(tmp.right!=null)
searchBranch(tmp.right,value);
}
输出
您要搜索什么?(0退出):红色
您要搜索什么?(0退出):绿色
您要搜索什么?(0退出):蓝色
您要搜索什么?(0退出):黄色
您要搜索什么?(0退出):黑色
您要搜索什么?(0退出):0
树值:红绿蓝黑黄
堆栈值:
1.黑色
2.黄色的
3.蓝色
4.绿色
5.红色的
要搜索存在历史记录的内容?(0退出):
红色的
找到记录,搜索历史记录中存在红色
要搜索存在历史记录的内容?(0退出):
绿色的
找到记录,绿色存在于搜索历史记录中
要搜索存在历史记录的内容?(0退出):
蓝色的
找到记录,蓝色存在于搜索历史记录中
**要搜索存在历史记录的内容?(0退出):黄色
未找到记录**
要搜索存在历史记录的内容?(0退出):
黑色的
找到记录,黑色存在于搜索历史记录中
我很好奇,虽然“黄色”被添加到树中,但“黄色”不在我的搜索结果中。您的
searchBranch
方法使用了错误的条件来决定搜索哪个子分支。它应该将tmp.data
与value
进行比较,以决定左分支和右分支之间的关系,而不仅仅是沿着哪个分支恰好通向某个地方:
public void searchBranch (StringTreeNode tmp, String value) {
if(value.equals(tmp.data)) {
System.out.println("Records found, " + value + " exist in search history!");
found = true;
} else if (value.compareTo(tmp.data) < 0)
searchBranch(tmp.left, value);
else
searchBranch(tmp.right, value);
}
publicsvoidsearchbranch(StringTreeNodeTMP,字符串值){
if(值等于(tmp数据)){
System.out.println(“找到记录,+value+”存在于搜索历史记录中!”);
发现=真;
}else if(值比较(tmp数据)<0)
searchBranch(tmp.left,value);
其他的
searchBranch(tmp.right,value);
}
请注意,这与
addLeaf
在决定给定的值属于节点的左分支还是右分支时使用的逻辑基本相同 嗨,金。检查其他人已完成的操作:。希望能有所帮助。但是请在您的开发环境中添加更多的细节,例如Java版本。Thx帮助我,我们将仔细查看