Зачем использовать рекурсию при обходе предварительного заказа (бинарное дерево поиска)? - PullRequest
0 голосов
/ 26 сентября 2018

У меня есть эти 3 различных метода обхода, которые проходят через мое двоичное дерево поиска.Я знаю, что как пост-заказ, так и обход в порядке следования идут снизу к корню, но предварительный заказ идет от корня к основанию.Поскольку рекурсия идет снизу вверх, почему мы используем рекурсию при обходе предзаказа?Все примеры предварительного заказа, которые я смог найти, используют рекурсию.

private void preOrder(BinaryNode<AnyType> t )
    {
        if(isEmpty()){
            System.out.println("Empty");
        }
        if(t != null) {
            System.out.println(t.element);
            preOrder(t.left);
            preOrder(t.right);
        }
    }

    private void postOrder(BinaryNode<AnyType> t){

        if(isEmpty()){
            System.out.println("Empty");
        }
        if (t != null) {
            postOrder(t.left);
            postOrder(t.right);
            System.out.println(t.element);
        }
    }

    private void inOrder(BinaryNode<AnyType> t)
    {
        if(isEmpty()){
            System.out.println("Empty");
        }

        if (t != null) {
            inOrder(t.left);
            System.out.println(t.element);
            inOrder(t.right);
        }
    }

1 Ответ

0 голосов
/ 26 сентября 2018

Ну, точка , когда мы печатаем узел дерева.

Порядок: System.out.println помещается после всех рекурсивных вызовов, поэтому алгоритм проходит через все узлы до конца и после , который начинает их печатать.

В случае предзаказа текущий узел печатается и после этого обрабатываются поддеревья.


Не существует таких правил, как «рекурсия идет снизу вверх или сверху вниз».Но если у вас есть код до рекурсивного вызова , он будет выполнен сверху вниз.Если у вас есть код после рекурсивного вызова, он будет выполнен снизу вверх.

...