Создание дерева из списка символов на основе арности символов в C# ⇐ C#
Создание дерева из списка символов на основе арности символов в C#
Я пытаюсь придумать, как создать дерево из списка символов, имеющих разную арность. Например, предположим, что у меня есть следующие символы с указанной арностью:
Символ Арити А 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(удалена из очереди); } еще { возврат из очереди; } } } выбросить новое исключение();
Я пытаюсь придумать, как создать дерево из списка символов, имеющих разную арность. Например, предположим, что у меня есть следующие символы с указанной арностью:
Символ Арити А 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(удалена из очереди); } еще { возврат из очереди; } } } выбросить новое исключение();
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Создание минимального примера работы на основе сервера на основе пристани на основе Apache
Anonymous » » в форуме JAVA - 0 Ответы
- 13 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Создание минимального примера работы на основе сервера на основе пристани на основе Apache
Anonymous » » в форуме JAVA - 0 Ответы
- 15 Просмотры
-
Последнее сообщение Anonymous
-