2010-12-10 38 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)))

一个例子的字符串输入 - 二叉树的表示。 如果是这样,你能以词形式提供一点树吗?只是几个叶子会做的伎俩。