三叉Trie树

public class TernarySearchTrie {

    

    private static class TSTNode{

        private String value=null;

        private TSTNode left;

        private TSTNode mid;

        private TSTNode right;

        private char splitChar;

        

        private TSTNode()

        {}

        

        private TSTNode(char c){

            splitChar=c;

        }

    }

        

    private TSTNode root=new TSTNode();

    

    public void addWord(String word)

    {

        TSTNode nodeRoot=root;

        for (int i = 0; i < word.length(); i++)

        {

            nodeRoot=getOrCreate(word.charAt(i),nodeRoot);

        }

        nodeRoot.value=word;

    }

    

    private TSTNode getOrCreate(char key,TSTNode node)

    {

        if(node.mid==null)

        {

            node.mid=new TSTNode(key);

            return node.mid;

        }

        TSTNode current=node.mid;

        while(true)

        {

            int dis=key-current.splitChar;

            if(dis==0)

            {

                return current;

            }

            else if(dis<0)

            {

                if(current.left==null)

                {

                    current.left=new TSTNode(key);

                    return current.left;

                }

                current=current.left;

            }

            else

            {

                if(current.right==null)

                {

                    current.right=new TSTNode(key);

                    return current.right;

                }

                current=current.right;

            }

        }

    }

    

    public String getNode(String word)

    {

        TSTNode nodeRoot=root;

        for (int i = 0; i < word.length(); i++)

        {

            nodeRoot=getNode(word.charAt(i),nodeRoot);

            if(nodeRoot==null)

            {

                return null;

            }

        }        

        return nodeRoot.value;

    }

    

    private TSTNode getNode(char key,TSTNode node)

    {

        if(node.mid==null)

        {

            return null;

        }

        TSTNode current=node.mid;

        while(true)

        {

            int dis=key-current.splitChar;

            if(dis==0)

            {

                return current;

            }

            else if(dis<0)

            {

                if(current.left==null)

                {

                    return null;

                }

                current=current.left;

            }

            else

            {

                if(current.right==null)

                {

                    return null;

                }

                current=current.right;

            }

        }

    }

    

}



 



 



        TernarySearchTrie tree=new TernarySearchTrie();

        tree.addWord("is");

        tree.addWord("in");

        tree.addWord("it");

        

        tree.addWord("be");

        tree.addWord("by");



        tree.addWord("as");

        tree.addWord("at");

        

        tree.addWord("he");

        

        tree.addWord("on");

        tree.addWord("or");

        tree.addWord("of");

        

        tree.addWord("to");

        

        

        System.out.println(tree.getNode("is"));

        System.out.println(tree.getNode("on"));

        System.out.println(tree.getNode("to"));


三叉Trie树 三叉Trie树
 
  

你可能感兴趣的:(trie)