0

我有一棵如下所示的树(一个简单的例子,可以是可变大小)。

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

我编写了一个 Java 类来基于 NumberOfSiblings(水平)和 NumberOfChildren(垂直)生成这棵树。我现在正在寻找一个类来生成树中给定条目的路径,例如:

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

我相信我需要某种递归方法来计算破折号的数量并删除条目的最后一部分(虽然它可能是 10-10-10,但并不总是长度() - 2)。

这是将生成树的方法:

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

1

代替

path = category + "/" + category.substring(0, category.length() - 2);

尝试

int endIndex = category.lastIndexOf("-");
if(endIndex != -1)  {
     path = category + "/" + category.subString(0, endIndex);
}

如果没有破折号,不确定您要做什么,但只需将其粘贴在一个else块中即可。

于 2013-07-02T13:48:51.180 回答