Skip to content

Commit a8e963e

Browse files
add implementation for trie
1 parent fb924d8 commit a8e963e

File tree

16 files changed

+186
-17
lines changed

16 files changed

+186
-17
lines changed

HolczerUdemyCourses/src/trees/avl/AVLTree.java renamed to HolczerUdemyCourses/src/tree/avl/AVLTree.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package trees.avl;
1+
package tree.avl;
22

33
public class AVLTree<T extends Comparable<T>> implements Tree<T> {
44
private Node<T> root;

HolczerUdemyCourses/src/trees/avl/Node.java renamed to HolczerUdemyCourses/src/tree/avl/Node.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package trees.avl;
1+
package tree.avl;
22

33
public class Node<T> {
44
private Node<T> left;

HolczerUdemyCourses/src/trees/avl/Tree.java renamed to HolczerUdemyCourses/src/tree/avl/Tree.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package trees.avl;
1+
package tree.avl;
22

33
public interface Tree<T> {
44
void insert(T data);

HolczerUdemyCourses/src/trees/binarysearch/BinarySearchTree.java renamed to HolczerUdemyCourses/src/tree/binarysearch/BinarySearchTree.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package trees.binarysearch;
1+
package tree.binarysearch;
22

33
public class BinarySearchTree<T extends Comparable<T>> implements Tree<T> {
44
private Node<T> root;

HolczerUdemyCourses/src/trees/binarysearch/Node.java renamed to HolczerUdemyCourses/src/tree/binarysearch/Node.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package trees.binarysearch;
1+
package tree.binarysearch;
22

33
public class Node<T> {
44
private Node<T> left;

HolczerUdemyCourses/src/trees/binarysearch/Tree.java renamed to HolczerUdemyCourses/src/tree/binarysearch/Tree.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package trees.binarysearch;
1+
package tree.binarysearch;
22

33
public interface Tree<T> {
44
void insert(T data);

HolczerUdemyCourses/src/trees/fenwick/FenwickTree.java renamed to HolczerUdemyCourses/src/tree/fenwick/FenwickTree.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package trees.fenwick;
1+
package tree.fenwick;
22

33
// aka binary indexed tree
44
public class FenwickTree {
Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
package tree.prefix;
2+
3+
import static tree.prefix.Trie.ALPHABET_SIZE;
4+
5+
public class Node {
6+
private Node[] children;
7+
private String character;
8+
private int value;
9+
private boolean isLeaf;
10+
private boolean visited;
11+
12+
public Node(String character) {
13+
this.children = new Node[ALPHABET_SIZE];
14+
this.character = character;
15+
}
16+
17+
public void setNode(int index, Node node, int value) {
18+
node.setValue(value);
19+
children[index] = node;
20+
}
21+
22+
public Node[] getChildren() {
23+
return children;
24+
}
25+
26+
public void setChildren(Node[] children) {
27+
this.children = children;
28+
}
29+
30+
public String getCharacter() {
31+
return character;
32+
}
33+
34+
public void setCharacter(String character) {
35+
this.character = character;
36+
}
37+
38+
public boolean isLeaf() {
39+
return isLeaf;
40+
}
41+
42+
public void setLeaf(boolean leaf) {
43+
isLeaf = leaf;
44+
}
45+
46+
public int getValue() {
47+
return value;
48+
}
49+
50+
public void setValue(int value) {
51+
this.value = value;
52+
}
53+
54+
public boolean isVisited() {
55+
return visited;
56+
}
57+
58+
public void setVisited(boolean visited) {
59+
this.visited = visited;
60+
}
61+
62+
}
Lines changed: 107 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,107 @@
1+
package tree.prefix;
2+
3+
import java.util.ArrayList;
4+
import java.util.List;
5+
6+
import static java.lang.String.valueOf;
7+
8+
public class Trie {
9+
public static final int ALPHABET_SIZE = 26;
10+
private Node root;
11+
private int indexOfSingleChild;
12+
13+
public Trie() {
14+
this.root = new Node("");
15+
}
16+
17+
public void insert(String word, int value) {
18+
Node temp = root;
19+
20+
for (int i = 0; i < word.length(); i++) {
21+
char c = word.charAt(i);
22+
int index = c - 'a';
23+
if (temp.getChildren()[index] == null) {
24+
Node node = new Node(valueOf(c));
25+
temp.setNode(index, node, value);
26+
temp = node;
27+
} else {
28+
temp = temp.getChildren()[index];
29+
}
30+
}
31+
32+
temp.setLeaf(true);
33+
}
34+
35+
// O(m) running time complexity - where m is the length of the word
36+
public boolean search(String word) {
37+
Node temp = root;
38+
39+
for (int i = 0; i < word.length(); i++) {
40+
char c = word.charAt(i);
41+
int index = c - 'a';
42+
if (temp.getChildren()[index] == null) {
43+
return false;
44+
} else {
45+
temp = temp.getChildren()[index];
46+
}
47+
}
48+
49+
return true;
50+
}
51+
52+
public List<String> allWordsWithPrefix(String prefix) {
53+
Node temp = root;
54+
List<String> words = new ArrayList<>();
55+
56+
for (int i = 0; i < prefix.length(); i++) {
57+
char c = prefix.charAt(i);
58+
int index = c - 'a';
59+
temp = temp.getChildren()[index];
60+
}
61+
62+
dfs(temp, prefix, words);
63+
64+
return words;
65+
}
66+
67+
public String longestCommonPrefix() {
68+
StringBuilder lcp = new StringBuilder();
69+
Node temp = root;
70+
71+
while (childCount(temp) == 1 && !temp.isLeaf()) {
72+
temp = temp.getChildren()[indexOfSingleChild];
73+
lcp.append((char) (indexOfSingleChild + 'a'));
74+
}
75+
76+
return lcp.toString();
77+
}
78+
79+
private int childCount(Node node) {
80+
int childrenCount = 0;
81+
for (int i = 0; i < node.getChildren().length; i++) {
82+
if (node.getChildren()[i] != null) {
83+
childrenCount++;
84+
indexOfSingleChild = i;
85+
}
86+
}
87+
88+
return childrenCount;
89+
}
90+
91+
private void dfs(Node node, String prefix, List<String> words) {
92+
if (node == null) {
93+
return;
94+
}
95+
if (node.isLeaf()) {
96+
words.add(prefix);
97+
}
98+
99+
for (Node child : node.getChildren()) {
100+
if (child == null) {
101+
continue;
102+
}
103+
dfs(child, prefix + child.getCharacter(), words);
104+
}
105+
}
106+
107+
}

HolczerUdemyCourses/src/trees/redblack/Color.java renamed to HolczerUdemyCourses/src/tree/redblack/Color.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package trees.redblack;
1+
package tree.redblack;
22

33
public enum Color {
44
RED, BLACK

0 commit comments

Comments
 (0)