/* * WordTreeBag.java * Created on Feb 24, 2005 */ package word; /** * A tree-based implementation of WordBag. */ public final class WordTreeBag implements WordBag { private WordNode root; public WordTreeBag() {} public WordCount add(String str) { WordNode current = root, prev = null; int compare = 0; while (current != null) { compare = str.compareToIgnoreCase(current.word()); if (compare == 0) { current.incrementCount(); return current; } else { prev = current; if (compare < 0) current = current.left; else current = current.right; } } // if we reached this point, it means the string // is not in the tree, so let's add it WordNode node = new WordNode(str); if (prev == null) root = node; else if (compare < 0) prev.left = node; else prev.right = node; return node; } private static class WordNode extends WordCount { private WordNode left = null, right = null; private WordNode(String word) { super(word); } } }