Java 无法在Trie中设置isLeaf标志

Java 无法在Trie中设置isLeaf标志,java,trie,Java,Trie,在这个简单的应用程序中,我用两个词构建了一个trie——“abb”和“abbb”。isLeaf未能设置为“abb”,因为“应打印isLeaf”未在“abb”之后打印 这里少了什么 class Trie{ boolean isLeaf=false; Trie[] children=new Trie[26]; Trie(){ } } class Test { static void printTrie(Trie trie,

在这个简单的应用程序中,我用两个词构建了一个trie——“abb”和“abbb”。isLeaf未能设置为“abb”,因为“应打印isLeaf”未在“abb”之后打印

这里少了什么

class Trie{
    boolean isLeaf=false;
    Trie[] children=new Trie[26];
    
    Trie(){       
    }
}

class Test 
{ 
        static void printTrie(Trie trie, int p){
            if(trie==null)
                return;
            
            System.out.println((char)(p+'a'));
            if(trie.isLeaf)
                System.out.println("should print isLeaf");            
            
            for(int i=0;i<26;i++){
                if(trie.children[i]!=null)
                    printTrie(trie.children[i], i);
            }
        }

        // Driver program
        public static void main(String args[])
        {
            String[] words=new String[] {"abb","abbbb"};
            Trie trie=new Trie();
            for(var w:words){  
                Trie curr=trie;
                for(var c:w.toCharArray()){
                    curr.children[c-'a']=new Trie();
                    curr=curr.children[c-'a'];
                    System.out.println(c);
                }
                System.out.println("isLeaf");
                curr.isLeaf=true;
            }           
            printTrie(trie, -1);
        }
} 
class-Trie{
布尔isLeaf=false;
Trie[]children=新Trie[26];
Trie(){
}
}
课堂测试
{ 
静态void printTrie(Trie-Trie,int-p){
if(trie==null)
返回;
System.out.println((char)(p+'a');
如果(trie.isLeaf)
System.out.println(“应打印isLeaf”);

for(int i=0;i不应在for循环的第一行中为curr.children分配新的Trie,而应首先检查它是否在那里,并重用现有的子级。

在for(var c:w.tocharray())之后缺少行:if(curr.children[c-'a']==null){