aboutsummaryrefslogtreecommitdiffstats
path: root/csci1913/Java/project3
diff options
context:
space:
mode:
Diffstat (limited to 'csci1913/Java/project3')
-rw-r--r--csci1913/Java/project3/anagrams.txt11
-rw-r--r--csci1913/Java/project3/project3_strap012.java80
2 files changed, 59 insertions, 32 deletions
diff --git a/csci1913/Java/project3/anagrams.txt b/csci1913/Java/project3/anagrams.txt
new file mode 100644
index 0000000..873a0cc
--- /dev/null
+++ b/csci1913/Java/project3/anagrams.txt
@@ -0,0 +1,11 @@
+test
+estt
+this
+sett
+ttes
+paul
+bill
+ringo
+a
+the
+eht \ No newline at end of file
diff --git a/csci1913/Java/project3/project3_strap012.java b/csci1913/Java/project3/project3_strap012.java
index afd0aa7..966c4fb 100644
--- a/csci1913/Java/project3/project3_strap012.java
+++ b/csci1913/Java/project3/project3_strap012.java
@@ -6,7 +6,7 @@ class AnagramTree {
private WordNode words;
private TreeNode left, right;
private TreeNode(String word, byte[] summary) {
- words = new WordNode(word);
+ words = new WordNode(word, null);
this.summary = summary;
left = null; right = null;
}
@@ -15,55 +15,70 @@ class AnagramTree {
private class WordNode {
private String word;
private WordNode next;
- private WordNode(String word) {
+ private WordNode(String word, WordNode next) {
this.word = word;
- next = null;
+ this.next = next;
}
}
public AnagramTree() {
- head = new TreeNode("e", stringToSummary("e"));
+ head = new TreeNode(null, null);
}
public void add (String word) {
byte [] newSumm = new byte [26];
newSumm = stringToSummary(word);
- TreeNode top = head, bottomR = head.right, bottomL = head.left;
- // boolean goLeft = false;
- try { while (true) {
- int comp = compareSummaries(top.summary, newSumm);
- if (comp < 0) { // left is less than right, go left
- top = bottomL;
- // goLeft = true;
- bottomL = bottomL.left;
- } else if (comp > 0) { // right is less, go right
- top = bottomR;
- // goLeft = false;
- bottomR = bottomR.right;
+ TreeNode top = head, bottom = top.right;
+ boolean goLeft = false, addWord = false;
+ try { while (bottom != null) {
+ int comp = compareSummaries(bottom.summary, newSumm);
+ if (comp > 0) { // left is less than right, go left
+ top = bottom;
+ goLeft = true;
+ bottom = bottom.left;
+ } else if (comp < 0) { // right is less, go right
+ top = bottom;
+ goLeft = false;
+ bottom = bottom.right;
} else {
- top.words.next = new WordNode(word);
+ bottom.words = new WordNode(word, bottom.words);
+ addWord = true;
+ break;
}
- }} catch (NullPointerException ignore) {
- top = new TreeNode(word, newSumm);
}
- }
+ if (addWord) {} // Do nothing
+ else {
+ if (goLeft)
+ top.left = new TreeNode(word, newSumm);
+ else
+ top.right = new TreeNode(word, newSumm);
+ }
+ } catch (NullPointerException ignore) {
+ System.out.println("A");
+ }
+ }
public void anagrams() {
- findAnagrams(head.left);
- findAnagrams(head.right); //e should be lower than other words as it is e
- }
-
- private void findAnagrams(TreeNode subtree) {
- try { while (true) {
- findAnagrams(subtree.right);
- findAnagrams(subtree.left);
-
- } } catch (NullPointerException ignore) { /* Do nothing */}
+ System.out.println(findAnagrams(head.right)); //e should be lower than other words as it is e
}
- public String toString() {
+ private String findAnagrams(TreeNode subtree) {
StringBuilder builder = new StringBuilder();
-
+ try {
+ if (subtree.words.next != null) {
+ while (subtree.words != null) {
+ builder.append(subtree.words.word);
+ builder.append(" ");
+ subtree.words = subtree.words.next;
+ }
+ }
+ if (subtree != null) {
+ findAnagrams(subtree.right);
+ findAnagrams(subtree.left);
+ }
+ } catch (NullPointerException ignore) {
+ //Do nothing
+ }
return builder.toString();
}
@@ -92,5 +107,6 @@ class Anagrammer {
while (words.hasNext()) {
anagrams.add(words.next());
}
+ anagrams.anagrams();
}
} \ No newline at end of file