Эта версия работает правильно:
Код: Выделить всё
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 являются ссылками на TreeNode.
Код: Выделить всё
root.left - Когда tmp назначен root.left, последующие изменения в root.left не влияют на tmp.
- Но когда tmp назначен root, последующие изменения в root действительно влияют на то, что наблюдает tmp.
Какова именно семантическая разница между этими двумя случаями в Java?
В частности, как происходит присваивание из поля (
Код: Выделить всё
root.leftКод: Выделить всё
rootЯ не спрашиваю, как инвертировать дерево — я спрашиваю, почему поведение ссылок в этих двух случаях различается.
Подробнее здесь: https://stackoverflow.com/questions/798 ... e-work-but
Мобильная версия