字典树Java模板

package binarytree;  

/** 
 * 字典树的Java实现。实现了插入、查询以及深度优先遍历. 
 * Trie tree's java implementation.(Insert,Search,DFS) 
 * @author jiutianhe 
 * @time 2012.10.16 
 */  
public class TrieTree {  
    final int MAX_SIZE=26;  
    public class TrieTreeNode {       
        int nCount;//记录该字符出现次数  
        char ch; //记录该字符  
        TrieTreeNode[] child;  

        public TrieTreeNode() {  
            nCount=1;  
            child=new TrieTreeNode[MAX_SIZE];  
        }  


    }  
    //字典树的插入和构建  
    public void createTrie(TrieTreeNode node,String str){  
        if (str==null||str.length()==0) {  
            return;  
        }  
        char[] letters=str.toCharArray();  
        for (int i = 0; i < letters.length; i++) {  
            int pos = letters[i] - 'a';    
            if (node.child[pos] == null) {    
                node.child[pos] = new TrieTreeNode();     
            }else {  
                node.child[pos].nCount++;  
            }  
            node.ch=letters[i];              
            node = node.child[pos];              
        }  
    }  
    //字典树的查找  
    public int findCount(TrieTreeNode node,String str){  
        if (str==null||str.length()==0) {  
            return -1;  
        }  
        char[] letters=str.toCharArray();  
        for (int i = 0; i < letters.length; i++) {  
            int pos = letters[i] - 'a';    
            if (node.child[pos] == null) {    
                return 0;     
            }else {  
                node=node.child[pos];  
            }             
        }  
        return node.nCount;  
    }  

}  

[java] view plain copy 在CODE上查看代码片派生到我的代码片
@Test  
    public void trieTreeTest2(){  
    /** 
     * Problem Description   
     * 老师交给他很多单词(只有小写字母组成,不会有重复的单词出现),现在老师要他统计 
     * 出以某个字符串为前缀的单词数量(单词本身也是自己的前缀).   
     */  
        String[] strs={     
                "banana",     
                "band",     
                "bee",     
                "absolute",     
                "acm",     
        };     
        String[] prefix={     
            "ba",     
            "b",     
            "band",     
            "abc",     
        };    
        TrieTree tree = new TrieTree();  
        TrieTreeNode root=tree.new TrieTreeNode();  

        for (String s : strs) {    
            tree.createTrie(root, s);    
        }     
//        tree.printAllWords();     
        for(String pre:prefix){     
            int num=tree.findCount(root,pre);     
            System.out.println(pre+" "+num);     
        }  

    }  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值