Binärbaum drucken
Posted: 12 Jan 2025, 17:03
Ich versuche, einen einfachen Binärbaum in Java visuell auszudrucken.
Hier ist der vollständige Code:
Hier ist meine Ausgabe:
Erwartete Ausgabe:
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.
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();
}
}
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)
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)
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.