I built a binary search tree using a text file that is read by the main function. The resulting tree contains the words of a text file with a counter, so that the same word is not inserted twice. The problem is not in creating a tree, but in the correct display of information. Data should be printed in columns 4 to keep them readable.
Example:
|BTNode1|BTNode2|BTNode3|BTNode4| |BTNode5|BTNode6|BTNode7|BTNode8|
The BTNode class has a toString() method that outputs data from individual nodes. But whenever I call this code below with the root of the node and the number 0, I get the node information correctly, but in strange numbers of nodes per column. Any ideas how to make this work? If necessary, I can add additional code.
EDIT: Added a whole class to reflect changes and added sample output current. There may be a problem with building a tree.
EDIT2: Changed printcount = 1 , fixes display issues. The code now works correctly.
package speech; public class BSTree { private BTNode root; private final String DISPLAY_FORMAT_CAPS = "*****************************************************************"; private StringBuilder buffer = new StringBuilder(); private int printcount = 1; public BSTree (){ root = null; } public BTNode insert(String indata, boolean lowercase){ if(lowercase){ if(root != null){ return insertRecursive(root,indata.toLowerCase()); } else{ root = new BTNode(indata.toLowerCase()); return root; } } else{ if(root != null){ return insertRecursive(root,indata); } else{ root = new BTNode(indata); return root; } } } private BTNode insertRecursive(BTNode node, String value) { if (value.compareTo(node.data) < 0){ if (node.left != null) { return insertRecursive(node.left, value); } else { //System.out.println(" Inserted " + value + " to left of Node " + node.data); node.left = new BTNode(value); return node.left; } } else if (value.compareTo(node.data) > 0) { if (node.right != null) { return insertRecursive(node.right, value); } else { //System.out.println(" Inserted " + value + " to right of Node " + node.data); node.right = new BTNode(value); return node.left; } } else if (value.compareTo(node.data) == 0){ node.incrementCount(); //System.out.println("Incremented count of " + value + " to: " + node.wordcount); return node; } return null; } private int wordcountRecursive(BTNode node){ if(node == null){ return 0; } else{ return wordcountRecursive(node.left) + node.wordcount + wordcountRecursive(node.right); } } public int wordcount(){ return wordcountRecursive(root); } public void display(){ System.out.println(DISPLAY_FORMAT_CAPS); displayRecursive(root); System.out.println(buffer.toString()); System.out.println(DISPLAY_FORMAT_CAPS); System.out.println("Word Count:" + wordcount()); } private void displayRecursive (BTNode node){ //System.out.println(count); if(node != null){ displayRecursive(node.left); addNodeDisplay(node); displayRecursive(node.right); } } private void addNodeDisplay(BTNode node){ if(printcount % 4 != 0){ buffer.append("|").append(node); } else{ buffer.append("|").append(node).append("|\n"); } printcount++; } }
source share