2008-09-27 4 views
12
나는이 같은 나무/감독 비순환 그래프 구현 뭔가가 필요

:나무 (감독 비순환 그래프) 구현

public class TreeNode<K, V> { 
    private K key; // 'key' for this node, always present 
    private V value; // 'value' for this node, doesn't have to be set 

    private TreeNode<K, V> parent; 
    private Set<TreeNode<K, V>> children; 
} 
  • 어떤 종류의 정렬이 없습니다입니다.
  • TreeNode은 키와 가능한 값을 감싸는 래퍼입니다 (노드는 값을 설정할 필요가 없습니다).
  • 부모와 자녀 모두에게 링크가 필요합니다.

나를 위해이 작업을 수행 할 표준 API 또는 Commons 등에 어떤 것이 있습니까?

나는 직접 쓰고 싶지 않다. (그리고 나는 확실히 이 아니다.은 너희에게 묻는다.) 나는 바퀴를 다시 발명하고 싶지 않다.

+2

트리와 지시 된 비순환 그래프는 똑같지 않다. 지시 된 비순환 적 그래프의 경우 노드가 여러 개의 부모를 가질 수 있기 때문에 이것은 부모의 서명이다 :'private Set >'. – jolivier

답변

11

그런 종류의 것 같지 않습니다. 나는 지난 주에 a similar question에게 물었고, 나 자신의 나무를 구현하는 것을 끝내었다. 내 구현은 당신이 제안한 것과 매우 유사했습니다.

public class TreeNode<T> 
{ 
    private LinkedList<TreeNode<T>> children = new LinkedList<TreeNode<T>>(); 
    public T value { get; set; } 

    public TreeNode(T value) 
    { 
     this.value = value; 
    } 
    public LinkedList<TreeNode<T>> GetChildren() 
    { 
     return children; 
    } 
} 

부모에게 다시 링크를 추가해야합니다.

1

나는 자신의 구현을 구현하는 것이 더 낫다고 말하고 싶다. (게다가 인터페이스는 멋지게 생각해 냈다.) 어쨌든이 트리에서 수행 할 작업은 무엇입니까? 원하는 것을 중심으로 API를 설계하고 싶을 것입니다. 키/값을 사용하여 개별 노드에 직접 액세스 할 수 있습니까? 횡단 유형? 작업 추가/제거?

0

그래프 기능을 추가로 찾으려면 JDigraphDigraph 클래스가 청구서에 적합해야합니다.

5

http://www.jgrapht.org도 있습니다. LGPL에서 사용이 허가 된 소프트웨어가 있습니다. 나는 당신에게 경고해야한다, 당신 자신의 것을 구현하는 것은 위험을 안고있다. 그래프 (구조체)에서 재귀를 사용할 계획이라면 그래프가 비 주기적인지 확인해야합니다. 그렇지 않으면 무한 루프 문제가 발생합니다. 이미 문제를 다룬 곳에서 제 3 자 코드를 사용하는 것이 더 좋습니다.