public class CodeTree { /** * Construct a codetree. */ public CodeTree() { myRoot = new TreeNode("", new TreeNode("", new TreeNode("s",null,null), new TreeNode("", new TreeNode("u",null,null), new TreeNode("y",null,null))), new TreeNode("", new TreeNode("n",null,null), new TreeNode("i",null,null))); } /** * Returns a decoded word for code. * @precondition code valid string of 0's and 1's * @return the decoded word for code */ public String bitsToWord(String code) { TreeNode current = myRoot; String result = ""; for(int k=0; k < code.length(); k++) { if (code.substring(k,k+1).equals("0")) { current = current.getLeft(); } else { current = current.getRight(); } if (current.getLeft() == null && current.getRight() == null) { // it's a leaf? result += current.getValue(); current = myRoot; } } return result; } /** * Returns the code for word * @precondition each character of word is in a leaf of codetree * @return the code for word */ public String wordToBits(String word) { String result = ""; for(int k=0; k < word.length(); k++) { result += wordToBitsHelper(word.substring(k,k+1),myRoot,""); } return result; } /** * Returns the code for s in codetree, returns "" if s not in tree * @precondition pathSoFar is path of 0's and 1's from myRoot to t * @return the path from myRoot to leaf containing s ,"" if no path */ private String wordToBitsHelper(String s, TreeNode t, String pathSoFar) { if (t.getLeft() == null && t.getRight() == null) { // leaf? if (t.getValue().equals(s)) { return pathSoFar; } else { return ""; } } String result = wordToBitsHelper(s,t.getLeft(), pathSoFar+"0"); if (result.length() > 0) { return result; } return wordToBitsHelper(s,t.getRight(),pathSoFar+"1"); } private TreeNode myRoot; public static void main(String[] args) { CodeTree ct = new CodeTree(); System.out.println(ct.bitsToWord("1110")); System.out.println(ct.bitsToWord("000101010011")); System.out.println(); System.out.println(ct.wordToBits("in")); System.out.println(ct.wordToBits("sunny")); } }