三叉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"));



posted on 2012-05-06 21:27  雨渐渐  阅读(516)  评论(0编辑  收藏  举报

导航