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やコモンズなどに何かありますか?

私はそれを自分で書いてもかまいません (そして、私は確かに皆さんにそうするように求めているわけではありません) 私は車輪の再発明をしたくないだけです.

4

4 に答える 4

11

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

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

親へのリンクを追加する必要があります。

于 2008-09-27T22:42:17.577 に答える
5

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

于 2009-01-13T21:25:43.547 に答える
1

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

于 2008-09-27T23:11:08.257 に答える
0

追加のグラフ機能を探している場合は、JDigraphDigraphクラスが最適です。

于 2008-09-27T23:44:34.400 に答える