Binärbaum druckenJava

Java-Forum
Guest
 Binärbaum drucken

Post by Guest »

Ich versuche, einen einfachen Binärbaum in Java visuell auszudrucken.
Hier ist der vollständige Code:

Code: Select all

class WordPoint {
private final String word;
private final float pointValue;

public WordPoint(String w, float pw) {
this.word = w;
this.pointValue = pw;
}

public String getWord() {
return word;
}

public float getPointValue() {
return pointValue;
}

@Override
public String toString() {
return "(" + word + ", " + pointValue + ")";
}
}

Code: Select all

class BinarySearchTree {
private Node root;

static class Node {
WordPoint data;
Node left;
Node right;

Node(WordPoint data) {
this.data = data;
}
}

// Method to insert a new WortPoint into the tree
public void insert(WordPoint wp) {
root = insertRec(root, wp);
}

private Node insertRec(Node root, WordPoint wp) {
if (root == null) {
return new Node(wp);
}

if(wp.getWord().charAt(0) < root.data.getWord().charAt(0)) {
root.left = insertRec(root.left, wp);
} else if (wp.getWord().charAt(0) > root.data.getWord().charAt(0)) {
root.right = insertRec(root.right, wp);
}

return root;
}

public void traversePreOrder(StringBuilder sb, String padding, String     pointer, Node node) {
if (node != null) {
sb.append(padding);
sb.append(pointer);
sb.append(node.data.getWord());
sb.append("(").append(node.data.getPointValue()).append(")");
sb.append("\n");

StringBuilder paddingBuilder = new StringBuilder(padding);
paddingBuilder.append("|    ");

String paddingForBoth = paddingBuilder.toString();
String pointerForRight = "+--";
String pointerForLeft = (node.right != null) ? "|--" : "+--";

traversePreOrder(sb, paddingForBoth, pointerForLeft, node.left);
traversePreOrder(sb, paddingForBoth, pointerForRight, node.right);
}
}

public void print(PrintStream os) {
StringBuilder sb = new StringBuilder();
traversePreOrder(sb, "", "", this.root);
os.print(sb.toString());
}
}

Code: Select all

public class binaryTreeTest{
public static void main(String[] args) {
BinarySearchTree wordTree = new BinarySearchTree();

// Example words with their points
wordTree.insert(new WordPoint("copy", 5.2f));
wordTree.insert(new WordPoint("friend", 7.76f));
wordTree.insert(new WordPoint("end", 4.94f));
wordTree.insert(new WordPoint("apple", 6.34f));
wordTree.insert(new WordPoint("baseball", 5.64f));
wordTree.insert(new WordPoint("happy", 7.7f));
wordTree.insert(new WordPoint("fine", 3.46f));
wordTree.insert(new WordPoint("spam", 2.94f));
wordTree.insert(new WordPoint("laugh", 7.84f));
wordTree.insert(new WordPoint("new", 3.24f));
wordTree.insert(new WordPoint("school", 7.76f));
wordTree.insert(new WordPoint("unicorn", 7.82f));

System.out.println();
wortBaum.print(System.out);
System.out.println();
}
}
Hier ist meine Ausgabe:

Code: Select all

copy(5.2)
|    |--friend(7.76)
|    |    |--end(4.94)
|    |    |    +--apple(6.34)
|    |    |    |    +--baseball(5.64)
|    |    +--happy(7.7)
|    +--spam(2.94)
|    |    |--laugh(7.84)
|    |    |    +--new(3.24)
|    |    +--unicorn(7.82)

Erwartete Ausgabe:

Code: Select all

copy(5.2)
|    |--friend(7.76)
|    |    |--end(4.94)
|    |    |    |--apple(6.34) //here the "|"  character is incorrect in my output
|    |    |    |    +--baseball(5.64)
|    |    |    +--fine(3.46) // this one is missing in my output
|    |    +--happy(7.7)
|    +--spam(2.94)
|    |    |--laugh(7.84)
|    |    |    +--new(3.24)
|    |    |    |    +--school(7.76) // this one is missing in my output
|    |    |
|    |    +--unicorn(7.82)
Die Gesamtstruktur funktioniert. Es fehlen lediglich die letzten Knoten im Baum. Hat jemand eine Idee, warum?
Ich habe versucht, die Werte regelmäßig in Form regelmäßiger Linien auszudrucken, und es hat funktioniert. Aber es visuell zu machen, funktioniert überhaupt nicht.

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post