ツリー(有向非巡回グラフ)の実装
-
02-07-2019 - |
質問
次のようなツリー/有向非巡回グラフの実装が必要です:
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を設計したいでしょう...キー/値による個々のノードへの直接アクセス?トラバーサルの種類?操作を追加/削除しますか
所属していません StackOverflow