Круглое представление BinTree для BinTree - PullRequest
3 голосов
/ 10 декабря 2010

Привет всем, я пишу программу, которая принимает строковое представление двоичного дерева и создает из него дерево.Код имеет для меня полный смысл, но он все равно не будет делать то, что должен.Спасибо всем.Вот некоторый код:

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

Ответы [ 3 ]

1 голос
/ 10 декабря 2010

Начните отладку, проверив значения s для каждого вызова findRoot(). Код выглядит хорошо, за исключением того, что я чувствую, что в ваших substring() параметрах есть отдельные ошибки.

0 голосов
/ 11 декабря 2010

Извините: мой низкий представитель не позволяет мне комментировать напрямую, поэтому мне нужно задать свой вопрос через этот ответ. Есть

(((() В (С)) D (Е)) F (G)) J (() К ((L), М (Т))) * * 1003

пример ввода строки - представление двоичного дерева. Если да, то можете ли вы предоставить в виде слова лишь небольшую часть дерева. Всего лишь пара листьев сделает это.

0 голосов
/ 10 декабря 2010

Я вижу, что когда вы нашли свой root, вы рекурсивно вызываете findRoot для всего, что осталось от корня, и всего, что справа. Или в любом случае. Вызов левого потомка удаляет круглые скобки вокруг него, а правый - нет. Видя, как вы нашли листовой узел, проверив длину строки в 3, вы захотите сохранить символы скобок. Поэтому вызов left child должен быть: findRoot(tree.substring(0, i).

...