嘿所有,我正在编写一个程序,它接受二叉树的字符串表示并从中创建一个树。代码对我来说完全合理,但它仍然不会做它应该做的事情。感谢大家。这是一些代码:
(((()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 :(得分:1)
通过检查每次s
调用的findRoot()
值来开始调试。代码看起来不错,只是我觉得你的substring()
参数中有一个错误。
答案 1 :(得分:0)
我看到当你找到你的root时,你会在root的左边和右边的所有内容上递归调用findRoot。或者意味着无论如何。对左子项的调用会删除它周围的括号,但右项则不会。通过检查字符串长度为3来查看叶子节点时,您希望保留parens。因此,左子调用应为:findRoot(tree.substring(0, i)
。
答案 2 :(得分:0)
抱歉:我的低级代表不允许我直接评论,所以我需要通过这个答案提出我的问题。 是
(((()B(C))d(E))F(G)).J(()K((L)M(T)))
示例字符串输入 - 二叉树的表示。 如果是这样,你能用单词形式提供一点树。只有几片树叶可以解决这个问题。