3

大家好,我正在编写一个程序,它接受二叉树的字符串表示并从中创建一棵树。该代码对我来说完全有意义,但它仍然不会做它应该做的事情。谢谢大家。这是一些代码:

(((()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;
}
4

3 回答 3

1

通过检查s每次调用的值来开始调试findRoot()。代码看起来不错,只是我感觉您的substring()参数中有一个错误。

于 2010-12-10T17:06:46.633 回答
0

我看到当你找到你的根时,你递归地在根的左边和右边的所有东西上调用 findRoot。或者无论如何。对左孩子的调用删除了它周围的括号,但右孩子没有。当您通过检查字符串长度为 3 找到叶节点时,您希望保留括号。所以左子调用应该是:findRoot(tree.substring(0, i).

于 2010-12-10T17:25:22.020 回答
0

抱歉:我的低代表不允许我直接发表评论,所以我需要通过这个答案提出我的问题。是

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

示例字符串输入 - 二叉树的表示。如果是这样,您能否以单词的形式提供一些树的内容。只要几片叶子就可以了。

于 2010-12-10T22:11:18.890 回答