Распечатать двоичное деревоJAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Распечатать двоичное дерево

Сообщение Anonymous »

Я пытаюсь визуально распечатать простое двоичное дерево на Java.
Вот полный код:

Код: Выделить всё

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 + ")";
}
}

Код: Выделить всё

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());
}
}

Код: Выделить всё

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();
}
}
Вот мой результат:

Код: Выделить всё

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)

Ожидаемый результат:

Код: Выделить всё

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)
Вся структура работает. Просто последние узлы в дереве отсутствуют. Кто-нибудь знает, почему?
Я пробовал регулярно распечатывать значения в виде обычных строк, и это сработало. А вот сделать это визуально совсем не получается.

Подробнее здесь: https://stackoverflow.com/questions/793 ... inary-tree
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «JAVA»