0
私はk-ary木を持っています。木が構築されたら、ノードの深さを計算する必要があります。k-ary木のあるノードの深さを見つける
はここで木のクラスは
public class DirectoryTree implements Serializable {
private TreeNode Root;
private int numNodes;
private TreeNode Focus;
private LocalDateTime date;
private long totalSizeOnDisk;
だ相続人のTreeNodeクラス:
public class TreeNode implements Serializable{
private FileSystemEntry data;
private boolean directory;
private TreeNode parent;
private ArrayList<TreeNode> children;
private int numChildren;
private int nodeKey;
private int depth;
は、私のオリジナルのアイデアは、幅優先順にツリーのすべてのノードをキューすることだった、とnumNodes変数を使用して与えられた節点の子をポップオフして、カウンタの変数が何であってもそれらの深さを設定しますが、それ以来、子どもの深さを見つけるためにポップされたノードを読み取ることはできません。だから、私は再帰的なアルゴリズムなどが必要なようです。たぶん、最初の修正幅:?この
のケース誰つまずくで
public void BFTree() {
Queue<TreeNode> queue = new LinkedList<TreeNode>();
queue.add(this.Root);
TreeNode current;
while ((current = queue.poll()) != null) {
BFTree(current, queue);
}
}
private void BFTree(TreeNode n, Queue<TreeNode> queue) {
System.out.println(n.getData().getName());
if (n.isDirectory()) {
for (int i = 0; i < n.getChildren().size(); i++) {
queue.add(n.getChildren().get(i));
}
}
}
最初に深さまたは幅のいずれかを検索できます。重要な点は、ノードの深さを計算する必要がある場合、常に親の深さにアクセスできることです。これを達成する方法はたくさんあります。 – Gene
深さの最初の検索...再帰呼び出しを行うと、親の深さ+ 1を渡して次の深度レベルを設定します。 – mba12
ああ、それは意味をなさないです...私はちょうど再帰的に各ノードにアクセスし、深さの親+ 1を作るでしょう。助けてくれてありがとう – Richardweber32