Вставка двоичного дерева () - PullRequest
0 голосов
/ 21 апреля 2011

Я пытаюсь заполнить двоичное дерево буквами, которые затем будут использоваться для кодирования последовательности кода Морзе, но я застрял в моем методе insert (), добавляющем букву дважды или более.

Есликод имеет «.»он уйдет влево
Если в коде есть '-', он уйдет вправо

А потом я пытаюсь пройти его, но мой вывод показывает мне много одинаковых букв

Вот мой insert():

private void insert(BinaryNode localRoot, BinaryNode node){
    if (localRoot == null) { //Replace empty tree with new tree with the item at the root.
        localRoot = node;
        return;
    }

    String result = node.getData().toString();//getting Item from BinaryNode.java


    //looping over morse code
    for(int cnt = 0;cnt<result.length();cnt++){

        if(result.charAt(cnt)=='.')
        {
            if (localRoot.getLeftSubtree() == null){
                localRoot.setLeftSubtree(node);}
        }

        else if(result.charAt(cnt)=='-'){

            if (localRoot.getRightSubtree() == null)
                localRoot.setRightSubtree(node);
        }

    }
}

Ответы [ 3 ]

3 голосов
/ 21 апреля 2011

Ваш метод вставки зацикливается на всей строке узла.Когда он находит «.»это добавляет налево.Когда он находит «-», он добавляет справа.Если в строке вашего узла есть оба символа '.'и '-' в нем, он будет добавлен слева и справа (если слева и справа были нулевые для начала).Я не уверен, что вы пытаетесь сделать, но возможно, вам следует проверять только первую букву в строке вашего узла.

1 голос
/ 21 апреля 2011

Должно ли это быть дерево?Почему бы не использовать хэш-карту?

0 голосов
/ 26 апреля 2011

Ваш insert выполняет следующие действия:

Если localroot имеет значение null, ничего не предпринимайте (хорошо, вы устанавливаете две локальные переменные как одинаковые, но в целом это запрещено) Если ваш localroot не являетсяnull, вы устанавливаете его левое поддерево в узел для каждого '.'вы найдете и правильное поддерево для каждого '-' вы найдете.

Я не знаю, каков ваш начальный "localroot", но предполагается, что это (не нулевой) узел, представляющий пустую строку Морзе, после вставки "A", то есть ".-", вашего корнябудет иметь двух дочерних элементов «A» и «A» (один и тот же объект узла), а затем будет заменен на «B», затем на «C», «D», а затем на «E», что будет устанавливать только левоеподдерево ...

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