码迷,mamicode.com
首页 > 其他好文 > 详细

Implement Trie (Prefix Tree) 两种实现方法的比较

时间:2016-01-17 10:55:31      阅读:166      评论:0      收藏:0      [点我收藏+]

标签:

class TrieNode {  
    public TrieNode[] children = new TrieNode[26];  
    public String item = "";  
      
    // Initialize your data structure here.  
    public TrieNode() {  
    }  
}  
  
class Trie {  
    private TrieNode root;  
  
    public Trie() {  
        root = new TrieNode();  
    }  
  
    // Inserts a word into the trie.  
    public void insert(String word) {  
        TrieNode node = root;  
        for (char c : word.toCharArray()) {  
            if (node.children[c - ‘a‘] == null) {  
                node.children[c - ‘a‘] = new TrieNode();  
            }  
            node = node.children[c - ‘a‘];  
        }  
        node.item = word;  
    }  
  
    // Returns if the word is in the trie.  
    public boolean search(String word) {  
        TrieNode node = root;  
        for (char c : word.toCharArray()) {  
            if (node.children[c - ‘a‘] == null) return false;  
            node = node.children[c - ‘a‘];  
        }  
        return node.item.equals(word);  
    }  
  
    // Returns if there is any word in the trie  
    // that starts with the given prefix.  
    public boolean startsWith(String prefix) {  
        TrieNode node = root;  
        for (char c : prefix.toCharArray()) {  
            if (node.children[c - ‘a‘] == null) return false;  
            node = node.children[c - ‘a‘];  
        }  
        return true;  
    }  
}  

技术分享

 

class TrieNode {  
    // Initialize your data structure here.  
    char c;  
    boolean leaf;   //leaf属性是一个字符串的结尾标志
    HashMap<Character, TrieNode> children = new HashMap<Character, TrieNode>();  
      
    public TrieNode(char c) {  
        this.c = c;  
    }  
          
    public TrieNode(){};  
}  
  
class Trie {  
    private TrieNode root;  
  
    public Trie() {  
        root = new TrieNode();  
    }  
  
    // Inserts a word into the trie.  
    public void insert(String word) {  
        Map<Character, TrieNode> children = root.children;   //用map构造了一个trie树
        for(int i=0; i<word.length(); i++) {  
            char c = word.charAt(i);  
            TrieNode t;  
            if(children.containsKey(c)) {  
                t = children.get(c);  
            } else {  
                t = new TrieNode(c);  
                children.put(c, t);  
            }  
            children = t.children;  
            if(i==word.length()-1) t.leaf=true;  
        }  
    }  
  
    // Returns if the word is in the trie.  
    public boolean search(String word) {  
        TrieNode t = searchNode(word);  
        return t!=null && t.leaf;  
    }  
  
    public boolean startsWith(String prefix) {  
        return searchNode(prefix) != null;  
    }  
      
    private TrieNode searchNode(String word) {  
        Map<Character, TrieNode> children = root.children;  
        TrieNode t = null;  
        for(int i=0; i<word.length(); i++) {  
            char c = word.charAt(i);  
            if(!children.containsKey(c)) return null;  
            t = children.get(c);  
            children = t.children;  
        }  
        return t;  
    }  
}  

技术分享

Implement Trie (Prefix Tree) 两种实现方法的比较

标签:

原文地址:http://www.cnblogs.com/Guoyutian/p/5136866.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!