0

次のようなツリーがあります (単純な例で、可変サイズにすることができます)。

1 (root)
|---------------------------------|
1-1                              1-2
|------------|                    |--------------|
1-1-1     1-1-2                  1-2-1          1-2-2

NumberOfSiblings (水平方向) と NumberOfChildren (垂直方向) に基づいてこのツリーを生成する Java クラスを作成しました。私は現在、ツリー内の特定のエントリのパスを生成するクラスを作成しようとしています。たとえば、次のようになります。

Entry: 1-1-1
Path: /1/1-1/1-1-1

ダッシュの数を数え、エントリの最後の部分を削除する再帰的な方法が必要だと思います (常に length() - 2 とは限りませんが、10-10-10 になる可能性があります)。

これは、ツリーを生成するメソッドです。

public static void generateCatalog(String parent, int siblings, int children, int level) {
    for (int a = 1; a <= siblings; a++) {
        String child = parent + "-" + a;
        System.out.println(child);
        if (level <= children) {
            level++;
            generateCatalog(child, siblings, children, level);
            level--;
        }
    }
}

パスを生成するためにこのようなことを試みてきましたが、うまく機能しません。

public static void getPath(String category, String path) {
    System.out.println("Category: " + category);
    System.out.println("Current path: " + path);
    int numberOfDashes = category.length() - category.replace("-", "").length();
    System.out.println("Number of dashes: " + numberOfDashes);
    while (numberOfDashes > 1) {
        path = category + "/" + category.substring(0, category.length() - 2);
        getPath(category, path);
    }
    System.out.println("New path: " + path);
}

誰かがこれを行うための最良の方法を教えてください。

4

1 に答える 1