почему бы не заказать рекурсивную логику заранее?

#binary-tree #recursive-datastructures

Вопрос:

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

почему это:

 static void leftCloned(Node root){
        if(root == null ){
            return ;
        }
        leftCloned(root.left);
        leftCloned(root.right);
        Node clone = new Node(root.data);
        clone.left = root.left;
        root.left = clone;
    }
 

почему бы не это:

 static void leftCloned(Node root){
            if(root == null ){
                return ;
            }
            Node clone = new Node(root.data);
            clone.left = root.left;
            root.left = clone;
            leftCloned(root.left);
            leftCloned(root.right);
        }
 

Комментарии:

1. Как объект узла может быть приравнен к НУЛЮ? Также оператор new возвращает указатель на объект узла, выделенный в куче.

2. @soubhisken если это Java, то каждый объект является ссылкой, и нулевая ссылка вполне приемлема.

3. @soubhiksen оба кода кажутся мне одинаковыми. В чем разница?

4. Ваша вторая версия-бесконечная рекурсия, потому что вы немедленно вызываете leftCloned() только что клонированный узел.

5. @AtharvaSharma Я отредактировал его, извините за путаницу.