Skip to content

Commit ea6f89d

Browse files
authored
Update Implement Trie II (Prefix Tree).java
1 parent ea1ff39 commit ea6f89d

File tree

1 file changed

+28
-23
lines changed

1 file changed

+28
-23
lines changed

Medium/Implement Trie II (Prefix Tree).java

Lines changed: 28 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -1,62 +1,67 @@
1-
public class Trie {
1+
import java.util.Optional;
22

3-
private final TrieNode root;
3+
4+
class Trie {
5+
6+
private final Node root;
47

58
public Trie() {
6-
this.root = new TrieNode();
9+
root = new Node();
710
}
811

912
public void insert(String word) {
10-
TrieNode curr = root;
13+
Node curr = root;
1114
for (char c : word.toCharArray()) {
1215
if (!curr.children.containsKey(c)) {
13-
curr.children.put(c, new TrieNode());
16+
curr.children.put(c, new Node());
1417
}
1518
curr = curr.children.get(c);
1619
curr.startingWordCount++;
1720
}
18-
curr.completeWordCount++;
21+
curr.endingWordCount++;
1922
}
2023

2124
public int countWordsEqualTo(String word) {
22-
TrieNode endNode = searchWord(word);
23-
return endNode == null ? 0 : endNode.completeWordCount;
25+
Optional<Node> curr = search(word);
26+
return curr.map(node -> node.endingWordCount).orElse(0);
2427
}
2528

2629
public int countWordsStartingWith(String prefix) {
27-
TrieNode endNode = searchWord(prefix);
28-
return endNode == null ? 0 : endNode.startingWordCount;
30+
Optional<Node> curr = search(prefix);
31+
return curr.map(node -> node.startingWordCount).orElse(0);
2932
}
3033

3134
public void erase(String word) {
32-
TrieNode curr = root;
35+
Node curr = root;
3336
for (char c : word.toCharArray()) {
3437
curr = curr.children.get(c);
3538
curr.startingWordCount--;
3639
}
37-
curr.completeWordCount--;
40+
curr.endingWordCount--;
3841
}
3942

40-
private TrieNode searchWord(String word) {
41-
TrieNode curr = root;
43+
private Optional<Node> search(String word) {
44+
Node curr = root;
4245
for (char c : word.toCharArray()) {
4346
if (!curr.children.containsKey(c)) {
44-
return null;
47+
return Optional.empty();
4548
}
4649
curr = curr.children.get(c);
4750
}
48-
return curr;
51+
return Optional.of(curr);
4952
}
5053

51-
private static class TrieNode {
52-
Map<Character, TrieNode> children;
53-
int completeWordCount;
54-
int startingWordCount;
54+
private static class Node {
5555

56-
public TrieNode() {
57-
this.children = new HashMap<>();
58-
this.completeWordCount = 0;
56+
private int startingWordCount;
57+
private int endingWordCount;
58+
59+
private final Map<Character, Node> children;
60+
61+
public Node() {
5962
this.startingWordCount = 0;
63+
this.endingWordCount = 0;
64+
this.children = new HashMap<>();
6065
}
6166
}
6267
}

0 commit comments

Comments
 (0)