Создание дерева из списка символов на основе арности символов в C#C#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Создание дерева из списка символов на основе арности символов в C#

Сообщение Anonymous »


Я пытаюсь придумать, как создать дерево из списка символов, имеющих разную арность. Например, предположим, что у меня есть следующие символы с указанной арностью:
Символ Арити А 2 Б 1 C 2 Д 0 Э 0
и у меня есть следующее строковое представление:

AABCDDEEDED

Я пытаюсь построить следующее дерево:

А / \ А Б / \ | К Д Д / \ Э Э В этом случае последние три символа (DED) использовать не нужно, поскольку дерево уже заполнено.

Я уже определил символы с определенной арностью, каждый из которых содержит свойство, которое может содержать список других символов; все символы реализуют ISymbol. Я также могу сгенерировать строку AABCDDE....

Но я немного не понимаю, как построить дерево. Есть ли название у такого дерева, которое я пытаюсь построить? Мне не удалось найти ничего конкретного о различном количестве узлов и построить его таким конкретным способом (т. е. создавать его слой за слоем до тех пор, пока все символы текущего слоя не будут заполнены дочерними элементами перед переходом к следующему слою).

Будем очень признательны за любую помощь в этом вопросе. ТИА.

[EDIT] Реализации на основе предложения @michael-liu
var root = GeneCoding![0] as Symbol; если (корень!.Арность == 0) { вернуть корень!; } вар очередь = новая очередь(); очередь.Enqueue(корень); Узел Символ; Символ ток; foreach (символ var в GeneCoding!.Skip(1)) { узел = (Символ)символ; если (узел.Арити!= 0) { очередь.Enqueue(узел); } текущий = очередь.Peek(); текущий.Узлы.Добавить(узел); if (current.Arity == current.Nodes.Count) { вар dequeued = очередь.Dequeue(); если (queue.Count > 0) { очередь.Enqueue(удалена из очереди); } еще { возврат из очереди; } } } выбросить новое исключение();
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C#»