Создание бинарного дерева из предзаказа цепочки битов - PullRequest
1 голос
/ 05 мая 2011

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

https://docs.google.com/viewer?a=v&pid=explorer&chrome=true&srcid=0B1DkmkmuB-leNDVmMDU0MDgtYmQzNC00OTdkLTgxMDEtZTkxZWQyYjM4OTI1&hl=en

Пример ввода:

a0
0
a00
ab000

, который дает вывод:

Дерево 1:
Недопустимо!
Дерево 2:
Высота: -1
путьдлина: 0
завершено: да
почтовый заказ:
дерево 3:
высота: 0
длина пути: 0
завершено: да
почтовый заказ: a
дерево 4:
высота: 1
длина пути: 1
завершено: да
заказ: ба

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

public class btsmall {
    int k = 0;
    char[] cArray;

    public static void main(String[] args) throws IOException {
        new btsmall().run();
    }

    static class Node {
        Node left;
        Node right;
        char value;

        public Node(char value) {
            this.value = value;
        }
    }

    public void run() throws IOException {
        String preorder;
        InputStreamReader input = new InputStreamReader(System.in);
        BufferedReader reader = new BufferedReader(input);

        while ((preorder = reader.readLine()) != null) {
            cArray = preorder.toCharArray();
            Node tree = null;
            insert(tree);
            preorder(tree);
            k = 0;
        }
    }

    public void insert(Node node) {
        if (cArray[k] == (char) 0) {
            node = new Node((char) 0);
            node.left = node.right = null;
            k++;
        } else {
            node = new Node(cArray[k]);
            k++;
            insert(node.left);
            insert(node.right);
        }
    }

    public void preorder(Node node) {
        if (node != null) {
            System.out.println(node.value + " ");
            preorder(node.left);
            preorder(node.right);
        }
    }
}

Я пытаюсь проверить, правильно ли я строю двоичное дерево с помощью метода предварительного заказа, но всякий раз, когда я запускаю программу, онкажется застрял где-то в бесконечном цикле.Может кто-нибудь помочь указать, что является причиной этого?И я действительно на правильном пути с этим?У кого-нибудь есть какие-нибудь подсказки о том, как мне следует строить это конкретное двоичное дерево?

Спасибо.

Ответы [ 2 ]

1 голос
/ 05 мая 2011

(char) 0 - это символ, который представлен Unicode U + 0000 (NUL).Вы хотите использовать '0' (U + 0030) в своем тесте.

Помимо этого, разработчик проблемы не указал, является ли данный предварительный порядок первым по глубине или первым по ширине (или что-то еще),поэтому нельзя быть уверенным, как правильно перестроить дерево.

1 голос
/ 05 мая 2011

это не бесконечный цикл. он просто ждет ввода от System.in

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...