单词查找树

import java.util.ArrayList;
import org.junit.Test;

public class TriNode{
    private static final int R=256;
    private static final ArrayList<String> keysWithPrefix=new ArrayList<String>();
    
    public static void put(Node x,String word){
        if(word.length()==0) return;
        for(int i=0;i<word.length();i++){
            char key=word.charAt(i);
            if(x.next[key]==null){
                x.next[key]=new Node();
            }
            x=x.next[key];
        }
        x.flag=true;
    }
public static void query(Node x,String pre){ for(int i=0;i<pre.length();i++){ char ch=pre.charAt(i); if(x.next[ch]==null) return; x=x.next[ch]; } collect(x,pre); } private static void collect(Node x,String pre){ if(x==null) return; if(x.flag!=false){ keysWithPrefix.add(pre); } for(char c=0;c<R;c++){ collect(x.next[c],pre+c); } } static class Node{ private Node[] next=new Node[R]; private boolean flag=false; } @Test public void test(){ Node root=new Node(); String[] text={"by","sea","sell","sells","shell","shells","she","sho"}; for(int i=0;i<text.length;i++){ put(root,text[i]); } query(root,"se"); System.out.println(keysWithPrefix); } }
原文地址:https://www.cnblogs.com/wqkant/p/6867367.html