метод замены двоичного дерева - PullRequest
0 голосов
/ 27 сентября 2011

У меня проблемы со сменой узлов между двумя двоичными деревьями.

Я пытаюсь поменять местами текущий узел с переданным узлом в дереве, но я не могу понять, как;Я могу только поменять местами родительские узлы, но не сами узлы.Кто-нибудь может дать мне какое-то направление?

    public void swap(Node node) {           
        if(this.equals(this.parent.leftChild)){
            Node tempNodeR = node.parent.rightChild;
            System.out.println("Is a left child");
            node.parent.rightChild = this.parent.leftChild;
            this.parent.leftChild = tempNodeR;
        }
        else{
            Node tempNodeL = node.parent.leftChild;
            System.out.println("Is a right child");
            node.parent.leftChild = this.parent.rightChild;
            this.parent.rightChild = tempNodeL;
        }        
    }

Calling node2.swap(node4):

Given Tree:
  1  3
 /    \
2      4

Resulting Tree (unchanged):
  1  3
 /    \
2      4

Expected Tree:
  1  3
 /    \
4      2

1 Ответ

0 голосов
/ 27 сентября 2011

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

Tree
  1  3
 /    \
2      4

Итак, здесь ...

  • 1 имеет ссылку, которая указывает на 2, чтоВы хотите указать на 4.
  • 2 имеет ссылку на 1, которая должна указывать на 3.
  • 4 имеет ссылку на 3, которая должна указывать на 1.
  • 3имеет ссылку на 4, которая должна указывать на 2.

Надеюсь, это поможет.

...