【问题标题】:search in tries in java在java中尝试搜索
【发布时间】:2023-04-11 09:09:02
【问题描述】:

您好,我有一个项目需要通过尝试来实现字典...但现在我无法实现搜索方法...我的代码在这里

public class TriesNode {
String value;
ArrayList<TriesNode> children = new ArrayList<TriesNode>();


String findNode(TriesNode root , String key ){
    for (int i=0 ; i<key.length() ; ++i){
        char temp= key.charAt(i);
        if ( !(root.children.equals(temp)))
            return null;
        else
            root = root.children.value.equals(temp);
    }
}

在这段代码中,我在 else 语句中有错误!!!! 我想用其中一个孩子替换根,它的值类似于 key(temp) 的第一个字符,但我不能在“else statement”中这样做......以及为什么我无法访问该值孩子??

【问题讨论】:

    标签: java dictionary trie


    【解决方案1】:

    好的,root 是 TriesNode 类型,但是 root.children 不是同一个类型,这就是问题所在。您不能分配来自不同类型的值。您必须声明一个 root.children 类型的变量,然后分配该值。要将 root.children 的值直接分配给 root,您必须这样做:

    root.Add(root.children)
    

    或多或少...

    【讨论】:

    • 我想用具有正确值的孩子替换 root,但是当我写“children.value”时,我无法访问太值。我该怎么办?
    • 你有一个数组列表,所以你必须选择其中一个 children.get(i) // 这里 i 是你想要获取的位置
    【解决方案2】:

    root = root.children.value.equals(temp) 不会将 root.child 分配给 root,而是将 true 或 false 分配给 root,因为您检查它是否等于 temp。

    java 也不允许你使用 if 语句从 if 语句返回不同类型的值。

    这将返回链中的最终根,这是您要寻找的值吗?

    试试

            TriesNode findFinalRoot(TriesNode root, String key){
                          if(key.length() == 0 )
                  return root;
            for(int x = 0 ; x <root.children.lenth(); x++)
    
              if (key.charAt(0) == root.children.get(x).charAt(0)){
                 findFinalRoot(root,key.subString(1)); // here you loss first character       
    }      
    

    【讨论】:

    • 我尝试检查 key 的第一个字符是否是其中一个孩子的值,然后用这个孩子替换根,然后用新根的孩子比较 key 的第二个字符。 ..我在python中有这段代码,但我无法将其转换为java“def find(node,key):for char in key:如果char不在node.children中:返回无其他:node = node.children [char]返回节点值”
    • 好的,你需要做的是一个一个地遍历整个子数组,并检查值是否相同。我将更改我的答案以反映我在这里的内容
    • root.children.lenth() 没有为数组列表定义,还有什么方法可以获取数组列表的长度吗?或者我应该将孩子定义为一个列表?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-07
    • 1970-01-01
    • 2015-01-29
    • 1970-01-01
    • 2012-10-13
    • 1970-01-01
    相关资源
    最近更新 更多