字符串二进制搜索树

时间:2019-12-22 05:02:36

标签: java binary-tree

我的二进制搜索树面临问题。添加所有String值后,我可以搜索之前搜索过的内容。但是,它无法检索存储在tree.right(或tree.left)中的值。即使我的tree.right有值,但是当我搜索它时,它将返回“找不到记录”。输出和代码如下所示:

  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);
}

输出

  

您要搜索什么?(0退出):红色

     

您要搜索什么?(0退出):绿色

     

您要搜索什么?(0退出):蓝色

     

您要搜索什么?(0退出):黄色

     

您要搜索什么?(0退出):黑色

     

您要搜索什么?(0退出):0

     

树值:红色绿色蓝色黑色黄色

     

堆栈值:   1.黑色   2.黄色   3.蓝色   4.绿色   5.红色

     

您要搜索什么存在历史?(0退出):   红色

     

找到记录,搜索历史中存在红色!

     

您要搜索什么存在历史?(0退出):   绿色

     

找到记录,搜索历史中存在绿色!

     

您要搜索什么存在历史?(0退出):   蓝色

     

找到记录,搜索历史中存在蓝色!

     

**您要搜索的存在历史记录是什么(0退出):黄色

     

未找到记录。**

     

您要搜索什么存在历史?(0退出):   黑色

     

找到记录,搜索历史中存在黑色!

我很好奇,尽管“ yellow”已添加到树中,但“ yellow”不在我的搜索结果中。

1 个答案:

答案 0 :(得分:0)

您的searchBranch方法使用错误的标准来确定要搜索的子分支。应该将tmp.datavalue进行比较,以决定左右分支之间的关系,而不仅仅是向下碰巧碰到某个分支所导致的分支:

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);
}

请注意,在确定给定的addLeaf是属于节点的左分支还是右分支时,这与value所使用的逻辑基本相同。

相关问题