Java 二叉树到二叉树的括号表示法

Java 二叉树到二叉树的括号表示法,java,recursion,tree,binary-tree,parentheses,Java,Recursion,Tree,Binary Tree,Parentheses,嘿,我正在写一个程序,它接受一个二叉树的字符串表示,并从中创建一棵树。代码对我来说是完全有意义的,但它仍然不能做它应该做的事情。谢谢大家。下面是一些代码: (((()B(C))D(E))F(G))J(()K((L)M(T))) 私有静态二叉树findRoot(字符串s){ 字符串树=s; int i=0; 整数计数=0; 弦根; if(tree.equalsIgnoreCase(“()”){ 返回null; } if(tree.length()==3){ 返回新的二叉树(Character.to

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

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

私有静态二叉树findRoot(字符串s){
字符串树=s;
int i=0;
整数计数=0;
弦根;
if(tree.equalsIgnoreCase(“()”){
返回null;
}
if(tree.length()==3){
返回新的二叉树(Character.toString(tree.charAt(1));
}

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

我发现,当您找到根时,您递归地调用根左边的所有内容和右边的所有内容的findRoot。或者无论如何,调用左边的子对象会删除它周围的括号,但右边的子对象不会。当您通过检查字符串长度3找到叶节点时,您希望保留参数。因此,左侧子项调用应该是:
findRoot(tree.substring(0,i)

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

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