生成字符串的树路径

时间:2013-07-02 13:39:01

标签: java tree

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

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

我相信我需要某种递归方法来计算破折号并取下条目的最后部分(不总是长度() - 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);
}

有人可以告诉我最好的方法吗?

1 个答案:

答案 0 :(得分:1)

而不是

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

尝试

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

如果没有破折号,不确定你想做什么,只是坚持在else区块。