@@ -37,10 +37,11 @@ public TrieNode() {
37
37
public void insert (String word ) {
38
38
word = word .toLowerCase (); // ignore case-sensitivity
39
39
TrieNode trav = root ;
40
+ char curr ;
40
41
for (int i = 0 ; i < word .length (); i ++) {
41
- char curr = word .charAt (i );
42
+ curr = word .charAt (i );
42
43
if (!trav .children .containsKey (curr )) {
43
- trav .children .put (curr , new TrieNode ()); // recall, the edges represent the characters
44
+ trav .children .put (curr , new TrieNode ()); // recall: new char is represented by this child node
44
45
}
45
46
trav = trav .children .get (curr );
46
47
}
@@ -55,8 +56,9 @@ public void insert(String word) {
55
56
public boolean search (String word ) {
56
57
word = word .toLowerCase ();
57
58
TrieNode trav = root ;
59
+ char curr ;
58
60
for (int i = 0 ; i < word .length (); i ++) {
59
- char curr = word .charAt (i );
61
+ curr = word .charAt (i );
60
62
if (!trav .children .containsKey (curr )) {
61
63
return false ;
62
64
}
@@ -72,8 +74,9 @@ public boolean search(String word) {
72
74
public void delete (String word ) {
73
75
word = word .toLowerCase ();
74
76
TrieNode trav = root ;
77
+ char curr ;
75
78
for (int i = 0 ; i < word .length (); i ++) {
76
- char curr = word .charAt (i );
79
+ curr = word .charAt (i );
77
80
if (!trav .children .containsKey (curr )) {
78
81
return ; // word does not exist in trie, so just return
79
82
}
@@ -92,8 +95,9 @@ public void delete(String word) {
92
95
public void deleteAndPrune (String word ) {
93
96
List <TrieNode > trackNodes = new ArrayList <>();
94
97
TrieNode trav = root ;
98
+ char curr ;
95
99
for (int i = 0 ; i < word .length (); i ++) {
96
- char curr = word .charAt (i );
100
+ curr = word .charAt (i );
97
101
if (!trav .children .containsKey (curr )) {
98
102
return ; // word does not exist in trie
99
103
}
@@ -102,12 +106,14 @@ public void deleteAndPrune(String word) {
102
106
}
103
107
trav .isEnd = false ;
104
108
105
- // now we start pruning
106
- for (int i = word .length () - 1 ; i >= 0 ; i --) {
107
- char curr = word .charAt (i );
108
- TrieNode nodeBeforeCurr = trackNodes .get (i );
109
- TrieNode nextNode = nodeBeforeCurr .children .get (curr );
110
- if (!nextNode .isEnd && nextNode .children .size () == 0 ) { // node essentially doesn't track anything, remove
109
+ // now, we start pruning
110
+ TrieNode currNode ; // nodes representing chars, where chars will be iterated from the back
111
+ TrieNode nodeBeforeCurr ;
112
+ for (int i = word .length () - 1 ; i >= 0 ; i --) { // consider chars from back
113
+ curr = word .charAt (i );
114
+ nodeBeforeCurr = trackNodes .get (i );
115
+ currNode = nodeBeforeCurr .children .get (curr );
116
+ if (!currNode .isEnd && currNode .children .size () == 0 ) { // node essentially doesn't track anything, remove
111
117
nodeBeforeCurr .children .remove (curr );
112
118
} else { // children.size() > 0; i.e. this node is still useful; no need to further prune upwards
113
119
break ;
0 commit comments