2015-12-06 7 views
0

Итак, для получаемого нами задания мы должны создать двоичное дерево поиска в одном из наших классов, представляющем код Морзе 1 (этот https://en.wikipedia.org/wiki/Morse_code#/media/File:Morse_code_tree3.png) в методе private void buildTree(). Чтобы помочь нам, он дал нам массив, заполненный всеми персонажами, которые я покажу через секунду. В методе мы должны создать дерево через ссылку на уже объявленный узел topMostNode. Массив значений полукокса здесьСоздание двоичного дерева поиска для кода Морзе

private static final char treeChars[] = 
    { 'E', 'I', 'S', 'H', '5', '4', 'V', '3', 'U', 'F', UNUSED_CHAR, '2', 'A', 
     'R', 'L', 'W', 'P', 'J', '1', 
     'T', 'N', 'D', 'B', '6', 'X', 'K', 
     'C', 'Y', 'M', 'G', 'Z', '7', 'Q', 'O', UNUSED_CHAR, '8', UNUSED_CHAR, '9', '0' 
    }; 

Он говорит, что существует определенная последовательность, мы должны использовать, чтобы поместить этот массив в формате ранее изображения в нашем дереве, но я смотрел на него для последние несколько часов и честно не могут понять, что это такое. Это кажется невозможным, потому что массив просто пропускает непечатаемые символы, которые не нужны в дереве, если они не нужны, чтобы указывать на другие допустимые символы, и эти недопустимые символы в случайном порядке помещаются внизу дерева, поэтому нет шаблона для зная, когда просто не указывать на часть dit или dah узла. Как мне это сделать? На данный момент я честно считал, что это просто хардкодирование. Благодаря!

ответ

0

Не на 100% уверен, как это работает, но я угадываю из массива, который вы хотите построить, и глядя на него, показывает, что это depth first tree. Это довольно простая концепция, которую вы можете легко перевести в массив для этого дерева; вокруг них лежат коды обхода первого дерева.

Как только у вас есть массив, вы можете получить левый или правый дочерний элемент текущего узла, используя 2*(node) для левого ребенка и 2*(node)+1 для правильного ребенка.

+0

Да, я хочу разместить массив, который он предоставил, в дерево, на которое можно ссылаться только с одного узла, у которого есть «topMostNode», и дерево должно выглядеть так: https://en.wikipedia.org/wiki /Morse_code#/media/File:Morse_code_tree3.png –

+0

Проблема с вашим решением заключается в том, что некоторые узлы в середине дерева указывают только на одно или два значения, потому что некоторые из самых нижних узлов являются недопустимыми символами, которые он не хочет в дереве, таким образом, не находятся в массиве. Другая проблема заключается в том, что массив не организован для того, чтобы сделать метод 2 * node/+ 1. По крайней мере, я думаю, может быть, вы правы, и я просто не вижу этого. –

+0

Я вижу, что вы говорите, из предоставленного массива, это не полное дерево, поэтому использование первого прохода по глубине не гарантирует, что вы знать, где узлы останавливаются. Существуют ли какие-либо другие спецификации для назначения, которые могут помочь выяснить, где должен заканчиваться узел? – Sacert

Смежные вопросы