Java - пробелы не отображаются при печати BinarySearchTree - PullRequest
0 голосов
/ 07 ноября 2019

Я пытаюсь реализовать код для BinarySearchTree в Java, и в процессе я пытаюсь написать метод, который будет печатать состояние двоичного дерева, на самом деле просто для проверки того, что тесты, которые я выполняюв моем коде проходят нормально. Я бы хотел, чтобы этот метод печатал дерево следующим образом:

                             rightRightRightChild
              rightRightChild
                             rightRightLeftChild
    rightChild
                             rightLeftRightChild
              rightLeftChild
                             rightLeftLeftChild
root
                             leftRightRightChild
              leftRightChild
                             leftRightLeftChild
    leftChild
                             leftLeftRightChild
              leftLeftChild
                             leftLeftLeftChild

... и так далее, когда я добавляю больше узлов или удаляю их и т. Д. Вот рекурсия, которую я написал в надеждедобиться этого:

    public void print(){
        System.out.println(print(root, 2));
    }

    private String print(Node<T> root, int i){
        String result = "";
        String strRoot = root.data.toString();
        if (root.right != null){
            String strRight = "";
            for (int j = 0; j < i; j++)
                strRight = strRight + "\t\t";
            strRight = strRight + print(root.right, i+2);
            result += strRight;
        }
        result += "\n"+strRoot;
        if (root.left != null){
            String strLeft = "";
            for (int j = 0; j < i; j++)
                    strLeft = strLeft + "\t\t";
            strLeft = strLeft + print(root.left, i+2);
            result += strLeft;
        }
        return result;
    }

Идея состоит в том, чтобы использовать рекурсию для создания довольно длинной строки, используя символы "\ n" и "" (или "\ t"), чтобы визуально представить дерево какдобавьте и удалите узлы, потому что мне легче увидеть, что происходит, когда я тестирую свою реализацию.

Вот как выглядит мой основной метод прямо сейчас:

public static void main(String[] args){
        /**
        *Testing add, contains and delete methods
        */
        BinarySearchTree<Integer> bst = new BinarySearchTree();

        bst.add(6);
        bst.print();
        System.out.println("-----------------");
        bst.add(3);
        bst.print();
        System.out.println("-----------------");
        bst.add(9);
        bst.print();
        System.out.println("-----------------");
        System.out.println("\nDoes this tree contain 6? " + (bst.contains(6)!=null));
        System.out.println("\nDoes this tree contain 11? " + (bst.contains(11)!=null));
        bst.add(8);
        bst.add(7);
        bst.delete(9);
        bst.print();
        System.out.println("-----------------");

ИтакЯ добавил некоторые вещи и удалил другую на своем BST, затем распечатал, и вот что я получаю:

Lucianos-MacBook-Pro:loucode luciano$ java BinarySearchTree

6
-----------------

6               
3
-----------------

9
6               
3
-----------------

Does this tree contain 6? true

Does this tree contain 11? false
87

8                               
7
6               
3
-----------------

Я попытался заменить "\ t" на простой простой "",но это тоже не сработало. Я немного сбит с толку и не могу понять, что происходит. Отступ не происходит.

...