2013-03-27 4 views
1

У меня есть двоичное дерево узла, содержащее целое число и символ. Я работаю над кодированием Хаффмана, и я хочу получить двоичное представление узлов. A '0' добавляется к строке для каждого левого ветвления, а для каждого правильного ветвления добавляется '1'.Поиск и отслеживание двоичного дерева

Я думаю о поиске символа, но следя за его ветвями, если он не находится в левом узле, удалите последнее «0», добавленное к строке, и вернитесь назад и проверьте правильность. Это выглядит очень интересно. Есть ли другой способ отслеживать узел?

EDIT: Мне нужно использовать двоичное дерево.

+0

Является ли мой вопрос непонятным? –

+0

Действительно строки? Вы не хотите, чтобы биты были фактическими битами? – harold

+0

Какой из них лучше/проще? –

ответ

2

Похоже на структуру стека данных:

отслеживать, где вы находитесь в дереве, используя стек таким образом:

  • путь = std::stack<int>
  • шага до родительского == pop()
  • шаг влево ребенок == push(0)
  • шаг направо ребенок == push(1)

Edit:

Вы можете фактически использовать std::vector<int> с push_back и pop_back. Он по-прежнему ведет себя как стек, но вы можете получить весь список 0 и 1 в конце, если вы используете вектор.

+0

Как бы я мог кодировать символы тогда? 0 для левой, 1 для правой. Как я могу сделать это с помощью стека? EDIT: О, я вижу ... –

+0

Я отредактировал, чтобы больше узнать –

2

Вы говорите о кодировании выхода Хаффмана?

Вам понадобится построить таблицу выходных кодов и длин для каждого возможного символа ввода - не пересекать дерево на каждом символе ввода.

+0

Мне нужно использовать двоичное дерево. См. Эту ссылку http://en.wikipedia.org/wiki/File:N-ary_to_binary.svg char N будет 0000 –

+0

.. для первого дерева. Предположим, что есть еще один узел наверху A. –

+0

Вправо - вы сначала строите двоичное дерево, но как только вы это сделаете, вы можете построить таблицу выходных кодов и длин для каждого символа. Это должны быть двоичные типы данных, а не строки. –

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