1

簡単な Tree と Node クラスを自分で作成しました (派手すぎず、多くのことを行う必要はありません)。次のレベルのノードの可変数があります。それらには ArrayList を使用しています。想定どおりに動作しますが、唯一の問題は toString() メソッドです。例: たくさんの数字で設定しました。

  • 0 はルートです
  • 0 には子 1、2、3 があります
  • 2 には子 2.4 と 2.5 があります

今、ツリーを印刷すると、これが得られます: (スラッシュはそこにあるはずです)

  • /0/1
  • /2/2.5
  • /2.4
  • /3

しかし、私が欲しいのはこれです:

  • /0/1
  • /0/2/2.5
  • /0/2/2.4
  • /0/3

これは私の toString() です:

public String toString() {
    String all = "";
    for (Node<T> node : nextNodes) {
        all += node.toString();
        if (node.isLeaf()) {
            all += "\n";
        }
    }
    return "/" + this.getNodeContent().toString() + all;
}

毎回ルートから歩くために何を変更する必要があるか誰か教えてください。ありがとう!

4

2 に答える 2

2

いくつかの 3 つのパスにはいくつのパスがありますか? コードが機能しないため、葉と同じ数のパスがあります。あなたが書いたコードは、すべてのノードを反復するだけです。しかし、根から葉までのすべてのパスを出力したいとします。

1 つの解決策は、再帰を使用することです。すべての子のルートおよび印刷パスから開始します。なんかこんな感じ

public void printPaths(Node<T> nodeOnPath, String onPath){
    String nodePath = onPath + "/" + nodeOnPath.getNodeContent().toString(); 
    if (nodeOnPath.isLeaf()){
        System.out.println(nodePath);
        return; 
    }

    ArrayList<Node> children = nodeOnPath.getChildren(); 
    for (Node<T> node : children){
        printPaths(node, nodePath); 
    }
}

パスを印刷するメソッドには printPaths という名前を付けました。2 つの引数を取ります。1 つ目はノードnodeOnPathで、2 つ目はルートからノードnodeOnPathへのパスです。メソッドの最初の行で、nodePath を作成します。次に、ノードが葉であるかどうかを確認します。答えが「はい」の場合は、nodePath を出力してメソッドを終了します。

ノードがリーフでない場合は、ノードのすべての子を取得し、それらを繰り返し処理し、すべてのノードに対してパスを生成します。この部分は for each ループにあります。

すべてのパスを印刷するには、次のようにメソッド printPaths を呼び出します

printPaths(rootNode, "");
于 2014-03-18T20:42:59.150 に答える
1

すべての子パスに getNodeContent() を追加する必要があります。これが解決策です。

   public String toString() {
        String all = ""
        for (Node<T> node : nextNodes) {
            all += this.getNodeContent().toString() + node.toString();
            if (node.isLeaf()) {
                all += "\n";
            }
        }
        return "/" +  + all;
    }
于 2014-03-18T20:41:52.227 に答える