在未排序的二叉树中搜索字符串

时间:2013-04-01 14:03:09

标签: java binary-tree binary-search-tree

我不确定我需要做什么才能搜索存储在二叉树中的字符串。我有写的搜索方法,但我不太清楚要传递什么。我需要先搜索字符串,然后再将其添加到树中。如果找到,我只需要在节点对象中增加计数器而不是添加新计数器。顺便说一下,这棵树是未分类的。

我的问题是如何在添加之前搜索它?

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

1 个答案:

答案 0 :(得分:1)

您搜索左右子树的方式存在错误。例如:

if (left != null) {
    left.treeSearch(s, root.left);
    if (root.toString().equals(s)) {
        return root;
    }
}

所以...你搜索左子树,但忽略搜索结果并再次将sroot进行比较。

对于正确的子树重复相同的模式。

(因为这有点像“学习练习”,我会让你弄清楚修复。)


话虽如此,如果你不订购二叉树的元素,它作为数据结构几乎是无用的。最好将元素存储在列表或数组中。 (treeSearch的复杂性为O(N) ...就像搜索列表或数组一样。)