Код: Выделить всё
This version works correctly:
TreeNode tmp = root.left;
root.left = root.right;
root.right = tmp;
Код: Выделить всё
TreeNode tmp = root;
root.right = tmp.left;
root.left = tmp.right;
• В обоих случаях tmp присваивается значение типа TreeNode
• root.left и root являются ссылками на TreeNode
• Когда tmp назначается root.left, последующие изменения в root.left не влияют на tmp
• Но когда tmp назначен root, последующие изменения в корне влияют на то, что tmp наблюдает
С моей точки зрения, оба присваивания копируют ссылку на TreeNode, поэтому я не понимаю, почему изменение root.left не влияет на tmp, а изменение root влияет.
Какова семантическая разница между этими двумя случаями в Java?
В частности, чем назначение из поля (root.left) отличается от назначения самой ссылки на объект (root)?
Я я не спрашиваю, как инвертировать дерево — я спрашиваю, почему поведение ссылки в этих двух случаях различается.
Подробнее здесь: https://stackoverflow.com/questions/798 ... e-work-but
Мобильная версия