2013-07-02 19 views
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 

我相信,我需要某種形式的遞歸方法的將計劃的數量和脫掉條目的最後一部分(不是總是長度() - 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); 
} 

請問有人能告訴我最好的方法嗎?

+0

無需將標籤添加到問題中。我爲你移除它;-) – Burkhard

回答

1

而不是

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

嘗試

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

不知道你想要什麼,如果沒有任何破折號的事,但只要堅持,在一個else塊。