2012-04-17 7 views
0

Java에서 Red Black Tree를 구현하라는 요청을 받았지만이 작업이 어떻게 수행되는지는 분명하지 않습니다. 누군가가 내 노드 클래스에 대해 r/b 트리 구현에 대해 의견을 말하면 정말 좋을 것입니다. 여기 우리가 간다 :Java에서 r/b 트리에 대한 노드 클래스를 만드는 방법에 대한 조언이 필요합니다.

public class RBTnode { 

public RBTnode(int key, RBTnode left, RBTnode right) { 
    /* this is the constructor for a root node */ 
    color = 0; 
    parent = null; 
    key = this.key; 
    left = this.left; 
    right = this.right; 
} 

public RBTnode(int key, RBTnode left, RBTnode right, RBTnode parent, int color) { 
    key = this.key; 
    color = this.color; 
    left = this.left; 
    right = this.right; 
    parent = this.parent; 

} 

int color; // 0 black, 1 red 
int key; 
RBTnode parent; 
RBTnode left; 
RBTnode right; 

}

+0

코드에 대한 설명은 무엇입니까? 작동 되나요? 문제가 있습니까? ... 귀하의 질문은 무엇인가? – Kai

+0

두 개의 생성자를 만드는 것이 좋은 생각인지 궁금합니다. 왜냐하면 우리는 오직 한 개의 루트만을 가지기 때문에 분명히 첫 번째 생성자 만 필요하기 때문입니다. 또한 부모 노드와 자식 노드를 RBT 노드로 할당하는 것이 올바른 방법입니까? 아직 작동하는지 모르겠지만, 내 생각은 RBT 노드 객체를 포함해야하는 arraylist를 만들고, 다른 클래스에 메소드 (삽입, 트래버스 트리 등)를 togehter로 작성하려고합니다. – John

+2

어쩌면'parent = this.parent;'등을 뒤돌아 보겠습니까? :) – zapl

답변

1

나는 RB 나무에게 자신을 작성하지 않은,하지만 난 지금 그들에 대해 배우고있다. 내가 들었던 것에서, 당신은 약간의 조정이 필요할 것 같습니다.

당신은 RB 트리이 될 수있는 RB 트리의 순서를 따를 필요가 특정 규칙을 다음과 같습니다

  • 모든 노드가 빨간색 또는 검은 색
  • 루트 노드는 항상 검은 색
  • 새 노드는 항상 RED입니다.
  • RED 노드의 하위 노드는 모두 BLACK입니다.
  • 루트에서 리프 또는 null 자식까지의 모든 경로에는 동일한 수의 검은 노드가 있어야합니다.

그렇다고해서 새 노드를 항상 빨간색으로 초기화하려고하므로 두 번째 생성자가 필요하지 않다고합니다.

+0

나는 그들에 대해서도 배우고 있기 때문에 이진 검색 트리가 r/b 트리가되는 모든 요구 사항을 알고 있지만 네, 2 세대 생성자가 너무 많다고 생각합니다. – John

+0

첫 번째 생성자를 두 번째 호출자로 만들고 모두 잘못된 지점입니다. 그것은 당신이하고있는 일과 관계없는 좋은 코드의 기초 일뿐입니다. – Kevin