Мое дерево бинарного поиска не будет печатать значения, и я не знаю, является ли метод печати или метод добавления неправильным - PullRequest
0 голосов
/ 25 января 2020

Я пытаюсь создать двоичное дерево поиска, но код, похоже, не работает. Конструкторы и переменные моего BinaryNode

 private BinaryNode left;
 private BinaryNode right;
 public BinaryNode() {
     val = null;
     left = null;
     right = null;
 }
 public BinaryNode(String a, BinaryNode b, BinaryNode c) {
     val = a;
     left = b;
     right = c;
 }

Вот мой метод add и printPostOrder. BinaryNode x - это root, для которого узел со значением y будет дочерним.

public BinaryNode add(BinaryNode x, String y) {
        if(x==null) {
            x = new BinaryNode(y,null,null);
            return x;
        }
        if(y.compareTo(x.getVal())<0) {
            BinaryNode temp = x.getLeft();
            temp = add(x.getLeft(),y);
            x.setLeft(x);
        }
            else if(y.compareTo(x.getVal())>0){
                BinaryNode temp = x.getRight();
                temp = add(x.getRight(),y);
                x.setLeft(x);
            }
        return x;
        }
 public void printPostOrder(BinaryNode x) {
        if(x!=null) {
            System.out.print(x.getVal()+" ");
            printPostOrder(x.getRight());
            printPostOrder(x.getLeft());
        }
    }

Сообщение об ошибке -

    at sun.nio.cs.SingleByte.access$000(Unknown Source)
    at sun.nio.cs.SingleByte$Encoder.encodeArrayLoop(Unknown Source)
    at sun.nio.cs.SingleByte$Encoder.encodeLoop(Unknown Source)
    at java.nio.charset.CharsetEncoder.encode(Unknown Source)
    at sun.nio.cs.StreamEncoder.implWrite(Unknown Source)
    at sun.nio.cs.StreamEncoder.write(Unknown Source)
    at java.io.OutputStreamWriter.write(Unknown Source)
    at java.io.BufferedWriter.flushBuffer(Unknown Source)
    at java.io.PrintStream.write(Unknown Source)
    at java.io.PrintStream.print(Unknown Source)
    at BinarySearchTree.printPostOrder(BinarySearchTree.java:95)
    at BinarySearchTree.printPostOrder(BinarySearchTree.java:97)

, где последняя строка повторяется несколько раз раз. Помощь будет оценена.

1 Ответ

0 голосов
/ 27 января 2020

Ваш код несколько запутан и труден для понимания! Вот простой способ создать дерево двоичного поиска:

defination of bst class:
class BinaryNode {
    String val;
    BinaryNode left, right;
    public BinaryNode() {}
    public BinaryNode(String val) {
        this.val = val;
        this.left = this.right = null;
    }
    // setters - getters of all fields
 }



/* building bst */
private BinaryNode add(BinaryNode root, String val) {
    if(root == null) {
        root = new BinaryNode(val);
    }
    // if it is smaller than root's value, set in left hand
    if(root.getVal().compareTo(val) < 0) {
        root.setLeft(add(root.left, val));
    }
    // if it is greater than root's value, set in right hand
    else if(root.getVal().compareTo(val) > 0){
        root.setRight(add(root.right, val));
    }

    return root;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...