Trie-访问HashMap的Java代码错误

问题描述 投票:0回答:2
prog.java:16: error: cannot find symbol
            Trie node = curr.child.get(c);
                            ^
  symbol:   variable child
  location: variable curr of type Trie

我在下面提到的代码中遇到了上面提到的错误,我曾经在Trie数据结构的实现中插入一个元素。

import java.util.*;

class Trie {

    /** Initialize your data structure here. */
    public Trie() {
        Map<Character,Trie> child = new HashMap<>();
        boolean end;
    }

    /** Inserts a word into the trie. */
    public void insert(String word) {
        Trie curr = this;
        for(int i=0;i<word.length();i++){
            char c = word.charAt(i);
            Trie node = curr.child.get(c);
            if(node == null){
                node = new Trie();
                curr.child.put(c,node);
            }
            curr = node;
        }
        curr.end = true;
    }

}


// Your Trie object will be instantiated and called as such:

class Main{
    public static void main(String[] args){
        Trie obj = new Trie();
        String word = "ABCD";
        obj.insert(word);
    }
}

如何解决此错误...?

java algorithm data-structures trie
2个回答
0
投票

child未定义为Trie类的属性,因此您无法通过child访问curr.child,您要做的就是在构造函数外部定义属性。 (您必须对end做同样的事情)

这应该有效

class Trie {
     Map<Character,Trie> child ;
     boolean end;
    /** Initialize your data structure here. */
    public Trie() {
        child   = new HashMap<>();

    }

    /** Inserts a word into the trie. */
    public void insert(String word) {
        Trie curr = this;
        for(int i=0;i<word.length();i++){
            char c = word.charAt(i);
            Trie node = curr.child.get(c);
            if(node == null){
                node = new Trie();
                curr.child.put(c,node);
            }
            curr = node;
        }
        curr.end = true;
    }

}

0
投票

按如下所示将变量从构造函数移动到类,以便可以在所有方法中使用它们。当前,它们的范围仅限于构造函数。

Map<Character, Trie> child = new HashMap<>();
boolean end;
public Trie() { 

}
© www.soinside.com 2019 - 2024. All rights reserved.