Created
October 9, 2015 02:31
-
-
Save shiangree/3afd8543389774f1735b to your computer and use it in GitHub Desktop.
Trie Implementation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| package build; | |
| import java.util.*; | |
| public class Trie { | |
| private int SIZE = 26; | |
| private TrieNode root; | |
| Trie() | |
| { | |
| root = new TrieNode(); | |
| } | |
| private class TrieNode{ | |
| private int count; | |
| private TrieNode[] children; | |
| private boolean isLeaf; | |
| private char ch; | |
| TrieNode() | |
| { | |
| count=1; | |
| children = new TrieNode[SIZE]; | |
| isLeaf = false; | |
| } | |
| } | |
| public void insert(String s) | |
| { | |
| if(s==null || s.length()<=0) | |
| return; | |
| TrieNode node = root; | |
| char[] letters = s.toCharArray(); | |
| for(int i=0;i<s.length();++i) | |
| { | |
| int pos = letters[i]-'a'; | |
| if(node.children[pos]==null) | |
| { | |
| node.children[pos] = new TrieNode(); | |
| node.children[pos].ch = letters[i]; | |
| } | |
| else | |
| { | |
| node.children[pos].count++; | |
| } | |
| node = node.children[pos]; | |
| } | |
| node.isLeaf=true; | |
| } | |
| public int countPrefix(String prefix) | |
| { | |
| if(prefix==null || prefix.length()<=0) | |
| return -1; | |
| TrieNode node = root; | |
| char[] letters = prefix.toCharArray(); | |
| for(int i=0;i<prefix.length();++i) | |
| { | |
| int pos = letters[i]-'a'; | |
| if(node.children[pos]==null) | |
| return 0; | |
| else | |
| node = node.children[pos]; | |
| } | |
| return node.count; | |
| } | |
| public boolean has(String s) | |
| { | |
| if(s==null || s.length()<=0) | |
| return false; | |
| TrieNode node = root; | |
| char[] letters=s.toCharArray(); | |
| for (int i = 0, len = s.length(); i < len; i++) { | |
| int pos = letters[i] - 'a'; | |
| if (node.children[pos] != null) { | |
| node = node.children[pos]; | |
| } else { | |
| return false; | |
| } | |
| } | |
| return node.isLeaf; | |
| } | |
| public void preTraverse(TrieNode node) | |
| { | |
| if(node!=null) | |
| { | |
| System.out.println(node.ch+' '); | |
| for(TrieNode child:node.children) | |
| { | |
| preTraverse(child); | |
| } | |
| } | |
| } | |
| } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment