File tree 2 files changed +59
-0
lines changed
src/_DataStructures_/Trees/Trie
2 files changed +59
-0
lines changed Original file line number Diff line number Diff line change
1
+ class TrieNode {
2
+ constructor ( char ) {
3
+ this . char = char ;
4
+ this . children = [ ] ;
5
+ this . isEndOfWord = false ;
6
+
7
+ // mark all the alphabets as null
8
+ for ( let i = 0 ; i < 26 ; i += 1 ) this . children [ i ] = null ;
9
+ }
10
+
11
+ markAsLeaf ( ) {
12
+ this . isEndOfWord = true ;
13
+ }
14
+
15
+ unmarkAsLeaf ( ) {
16
+ this . isEndOfWord = false ;
17
+ }
18
+ }
19
+
20
+ module . exports = TrieNode ;
Original file line number Diff line number Diff line change
1
+ const Node = require ( './Node' ) ;
2
+
3
+ class Trie {
4
+ constructor ( ) {
5
+ this . root = new Node ( '' ) ;
6
+ }
7
+
8
+ insert ( key ) {
9
+ if ( ! key ) {
10
+ return false ;
11
+ }
12
+
13
+ // convert to lower case
14
+ // keys are basically words
15
+ const word = key . toLowerCase ( ) ;
16
+ let currentNode = this . root ;
17
+
18
+ for ( let level = 0 ; level < word . length ; level += 1 ) {
19
+ const index = this . getIndexOfChar ( word [ level ] ) ;
20
+ if ( ! currentNode . children [ index ] ) {
21
+ currentNode . children [ index ] = new Node ( word [ level ] ) ;
22
+ }
23
+ currentNode = currentNode . children [ index ] ;
24
+ }
25
+
26
+ // when we are done with inserting all the character of the word,
27
+ // mark the node as end leaf
28
+ currentNode . markAsLeaf ( ) ;
29
+ return true ;
30
+ }
31
+
32
+ // helper to get the index of a character
33
+ // eslint-disable-next-line class-methods-use-this
34
+ getIndexOfChar ( char ) {
35
+ return char . charCodeAt ( 0 ) - 'a' . charCodeAt ( 0 ) ;
36
+ }
37
+ }
38
+
39
+ module . exports = Trie ;
You can’t perform that action at this time.
0 commit comments