在 Java 中的 Trie 数据结构中插入和搜索

Insert and Search in Trie data structure in Java

我写了下面的 Java 代码用于在 Java 中插入和搜索单词:

public class trie {
    
    private class TrieNode{
        TrieNode[] children;
        boolean isWord;
        public TrieNode() {
            this.children = new TrieNode[26];
            this.isWord = false;
            for(int i= 0; i < 26; i++) {
                this.children[i] = null;
            }
        }
    }
    
    TrieNode root;
    
    public trie() {
        root = new TrieNode();
    }
    
    public void insert(String s) {
        if(s == null || s.isEmpty()) {
            throw new IllegalArgumentException("Invalid Input");
        }
        s = s.toLowerCase();
        TrieNode current = root; 
        
        for(int i=0; i < s.length(); i++) {
            char c = s.charAt(i);
            int index = c - 'a';
            if(current.children[index]==null) {
                TrieNode node = new TrieNode();
                current.children[i] = node;
                current = node;
            } else {
                current = current.children[index];
            }
        }
        current.isWord = true;
    }
    
    public boolean search(String s) {
        if(s==null || s.isEmpty()) {
            throw new IllegalArgumentException("Invalid or empty string");
        }
        s=s.toLowerCase();
        TrieNode current = root;
        for(int i=0; i < s.length(); i++) {
            int index = s.charAt(i) - 'a';
            if(current.children[index] == null) { 
                return false;
            } else {
                current = current.children[index];
            }
        }
        return current.isWord;
    }
    
    
    public static void main(String []args) {
        trie t = new trie();
        t.insert("car");
        t.insert("cat");
        t.insert("care");
        System.out.println("Insert successful!!");
        System.out.println(t.search("car"));
        
    }
}

搜索功能returns false 当前输出:
Insert successful!! false

不过我不知道哪里出了问题。我也检查了在线可用的各种资源。 有什么指点吗?

问题是您在 insert() 函数中将 node 分配给了当前 node 的错误子项。
更改这行代码:

current.children[i] = node;

对此:

current.children[index] = node;

问题会解决的。