Java 字符串二叉搜索树

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

我的二叉搜索树有问题。在添加所有字符串值后,我可以搜索我以前搜索过的内容。但是,它无法检索存储在tree.right(或tree.left)中的值。即使my tree.right具有该值,但当我搜索它时,它将返回“Record Not Found”。输出和代码如下所示:

  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帮助我,我们将仔细查看