#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 Я отредактировал его, извините за путаницу.