2012-07-06 4 views
2

트리 구조를 표시하고 싶습니다. 정말 "RootUnit"과 같이 미리 정의 된 하드 코드 된 루트 노드를 사용자/트리에 부여해야합니까? 그 노드는 자신의 하위 노드 또는 하위 노드를 추가 할 수 있습니까?트리에 정확히 하나의 루트 노드가 있어야합니다.

노드를 추가 할 때이 점이 의미가 있거나 문제가됩니까?

+0

사용중인 언어/프레임 워크에 해당하는 태그를 추가해야합니다. – assylias

+1

사용할 언어는 하나뿐입니다. P – Pascal

+3

@Pascal : Pascal? ;) – Piskvor

답변

1

트리에는 루트가 하나만 있어야합니다. 하지만 루트를 하드 코딩 할 필요는 없습니다. 처음 생성 된 트리 노드를 루트로 취급하십시오.

+0

그렇다면 nodes.count == 0 또는 nodes == Null 다음 newNode.parent = null 인 경우 노드를 추가 할 때마다 확인해야합니다. 나는 그렇게 성가신 것을 좋아하지 않는다. – Pascal

+0

루트를 만들 때 실제로는 알 수 없습니다. 정상적으로 노드를 만들고, 부모 노드가 NULL이면 루트를 만듭니다. – Rango

+0

사용자에게 AddRoot 버튼이 없습니다. 노드 추가 버튼 만 있으면 기존 노드 등에서 항상 개수 나 부모 == null 확인을 수행해야합니다. – Pascal

4

두 개의 뿌리가있는 경우 두 개의 나무가 있습니다.

+0

이것은 내 질문에 대한 답이 아니라 나무에 대한 일반적인 진술입니다. – Pascal

+0

@ Pascal - 귀하의 질문은 "나무에 정확히 하나의 루트 노드가 있어야합니다"이며 대답은 "예"여야하지만 Stackoverflow는 짧은 대답을 허용하지 않습니다. 나는 당신이 더 깊은 질문을 가지고 있다고 생각하지만 나머지 질문들까지 읽으면 아직도 나를 잊어 버린다. – LosManos

+0

내 질문의 마지막 부분을보십시오. "... 노드를 추가 할 때만 문제가 발생합니다 ..."사용자에게 add_descendant 및 add_children 단추가 있다고 가정 할 때이 시나리오에 대해 논의하고 싶습니다. – Pascal

0

모든 노드에 대해 동일한 생성자를 사용하는 대신 루트 노드에 사용되는 기본 생성자와 다른 모든 노드에 대해 사용되는 기본 생성자를 제공하십시오. 그것은 추한 것이 아니며 작동합니다.

public Node() 
{ 
    // Set properties if you'd like. 
    // such as having no children yet or whatnot. 
} 

public Node(Node parent) 
{ 
    // Similar to Node() 
} 

참조! 좋고 깨끗합니다.

+0

어디에서 오버로드 된 노트 생성자를 호출해야하는지 알 수 있습니까? 루트 노드 추가 버튼이 없습니다. 그것은 또한 말이되지 않습니다. – Pascal

1

정의에 따른 트리에는 하나의 루트 만 있고 모든 자식 노드에는 정확히 하나의 부모 (부모가없는 루트 제외)가 있습니다. 이러한 제한 사항이 충족되지 않으면 트리가 더 이상 트리가 아니지만 그래프 (방향이 지정되었거나 표시되지 않음)

1

상황에 따라 다릅니다. 엄밀한 수학적 정의에서 트리에 여러 루트 노드를 사용할 수 없습니다. 그러나이를 무시하고 최상위 노드가 여러 개있는 트리의 구현이 있습니다 (예 : TreeView 컨트롤과 함께이 질문을 태그로 지정). 특정 프로그램이 여러 최상위 레벨 노드에서 더 좋든 나쁘 든간에 스스로에게 묻기 만하면됩니다. 우리가 귀하의 프로그램에 대해 알지 못한다는 것을 감안할 때 우리가 정말로 당신을 위해 할 수있는 결정이 아닙니다.

관련 문제