2011-09-27 8 views
0

두 개의 이진 트리 사이에서 노드를 바꿔 쓰는데 문제가 있습니다.이진 트리 스와핑 방법

현재 노드를 트리의 전달 된 노드로 바꿔 쓰려고하는데 어떻게 될지 알 수 없습니다. 노드의 부모는 교환 할 수 있지만 노드 자체는 교환 할 수 없습니다. 누군가 내게 어떤 방향을 줄 수 있습니까?

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 
+2

실제로 나무입니까? – Joe

답변

0

각 노드에 대해 노드에는 부모에 대한 참조가 있고 부모 노드에는 해당 참조가 있습니다. 따라서 두 개의 노드를 교체하려면 네 개의 참조를 업데이트해야합니다. 그래서 여기

Tree 
    1 3 
/ \ 
2  4 

...

  • 1은 4
  • 2를 가리 키도록하려는이 가리키는 3.
  • 를 표시해야한다 (1)에 대한 참조가 참조가
  • 4 1.
  • 3 2.
,617 가리켜 야 4에 대한 참조가 가리켜 야 3에 대한 참조를 갖는다

도움이 되길 바랍니다.

+0

개념을 이해하지만 this = node 또는 this.parent.leftChild = node가 아무런 영향을 미치지 않기 때문에 java에서 this 연산자의 참조를 바꾸는 방법을 이해할 수 없습니다. 나는 내가 사소한 실수를 저지르고 있다고 느끼고있다. –