0

同じラベルを持つすべてのノードのパスを返すJAVAコードを書き込もうとしています。

リンクで指定された画像内。ラベルCの次のo/pを取得する必要があります

A-> B

A

出力として。

私はすべての可能なラベルを知っています。ラベルの範囲はAからJです。

ツリーのノードクラスは次のとおりです。

class Node{
 String label;
 int count;
 List<Node> children;

 public int hashCode() {
    return label.hashCode();
 }

 public boolean equals(Object obj) {
    Node other = (Node)obj;
    return other.label.equals(label);
 }
}

私は次のようなことを試みています

for(each label)
 start from root
 search for all possible label location
    print path for each label location

しかし、コードの書き方を理解することはできません。助けてください。

4

1 に答える 1

0

これを試して:

public List<List<String>> findPaths(String label) {
    List<List<String>> result = new ArrayList<List<String>>();

    if (label.equals(this.label)) {
        result.add(new ArrayList<String>());
    }

    for (Node child : children) {
        for (List<String> subResult : child.findPaths(label)) {
            // add this.label in front
            List<String> path = new ArrayList<String>();
            path.add(this.label);
            path.addAll(subResult);
            result.add(path);
        }
    }

    return result;
}

ArrayList各パスはStringラベルとしてエンコードされます。各リーフには空の子リストがあると想定しています。リーフの場合children == nullは、それを確認する必要があります。そうしないと、すべての子のループでNullPointerException.

ここで、ラベルのリストlabelsとルート ノードが与えられrootます。

for (String label : labels) {
    List<List<String>> paths = root.findPaths(label);
    for (List<String> path : paths) {
        printPath(path);
    }
}

printPath(List<String> path)実際のパスを出力する独自の関数を作成できると信じています...

于 2013-03-19T19:41:27.587 に答える