2010-12-10 20 views
3

嘿,我正在編寫一個程序,它接收二進制樹的字符串表示並從中創建一個樹。代碼對我來說完全有意義,但它仍然不會做它應該做的。感謝大家。下面是一些代碼:BinTree與BinTree的括號表示法

(((()B(C))D(E))F(G))J(()K((L)M(T)))

private static BinTree<String> findRoot(String s){ 
String tree = s; 
    int i = 0; 
    int count = 0; 
    String root; 
    if(tree.equalsIgnoreCase("()")){ 
     return null; 
    } 
    if(tree.length()==3){ 
     return new BinTree<String>(Character.toString(tree.charAt(1))); 
    } 
    while(i<tree.length()){ 
     if(tree.charAt(i)=='('){ 
      count++; 
     } 
     if(tree.charAt(i)==')'){ 
      count--; 
      if(count==0){ 
       i++; 
       root = Character.toString(tree.charAt(i)); 
       return new BinTree<String>(root, findRoot(tree.substring(1, i-1)), findRoot(tree.substring(i+1))); 
      } 
     } 
     i++; 
    } 
    return null; 
} 
+0

你的樹結構(左)根(右)? – shoebox639 2010-12-10 17:09:40

+0

是的,我認爲是的。 – 2010-12-10 17:14:30

回答

1

開始調試通過檢查的s值每次調用findRoot()。代碼看起來不錯,但我有一種感覺,你在參數substring()中有錯誤。

+0

爲什麼你在編輯時切斷了輸入的結尾? – 2010-12-10 17:08:19

+0

@TreverMA意外。固定。 – marcog 2010-12-10 17:14:53

0

我看到,當你找到你的根時,你遞歸地調用findRoot所有的根和右邊的所有東西。無論如何還是意味着。左邊的孩子的呼叫除去了括號,但是正確的不是。通過檢查字符串長度3來查找葉節點時,您希望保留父元素。所以左邊的孩子應該是:findRoot(tree.substring(0, i)

0

對不起:我的低代表不允許我直接發表評論,所以我需要通過這個答案問我的問題。 是

(((()B(C))d(E))F(G)).J(()K((L)M(T)))

一個例子的字符串輸入 - 二叉樹的表示。 如果是這樣,你能以詞形式提供一點樹嗎?只是幾個葉子會做的伎倆。