質問

次のようなツリー/有向非巡回グラフの実装が必要です:

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などには、これを行うものがありますか?

自分で書いても構いません(確かにではありません皆さんにお願いします)、車輪を再発明したくありません。

役に立ちましたか?

解決

この種のものはないようです。先週同様の質問を尋ねたところ、自分のツリーを実装することになりました。私の実装はあなたが提案しているものと非常に似ていました:

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;
    }
}

親にリンクを追加し直す必要があります。

他のヒント

http://www.jgrapht.org もあり、LGPLの下でライセンスされたソフトウェアがあります。ただし、独自の実装には危険が伴います。構造(グラフ)で再帰の使用を計画している場合、非周期であることを確認する必要があります。そうしないと、無限ループの問題が発生します。サードパーティのコードを使用した方が、すでに問題に対処している場合に適しています。

独自の実装を展開する方が良いと思います(インターフェースは既に十分に考え出されています)。とにかくこのツリーで実行する予定の操作は何ですか?あなたはおそらくあなたが望むものを中心にAPIを設計したいでしょう...キー/値による個々のノードへの直接アクセス?トラバーサルの種類?操作を追加/削除しますか

追加のグラフ機能を探している場合は、 JDigraph Digraph クラスは、法案に適合する必要があります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top