162 / 150 / 59
Регистрация: 11.01.2016
Сообщений: 1,311
|
|
1 | |
Построить дерево09.09.2016, 10:44. Показов 22699. Ответов 26
Метки нет (Все метки)
Здравствуйте.
Не могу построить дерево, пример найти не удаётся, одни примеры постройки бинарных деревьев. а мне нужно дерево вида (приложил картинку). Начальные данные. Есть список объектов класса connection, в классе connection есть поля : РодительскийОбъект , Объект вот пример нескольких объектов списка класса connection connection0 поля : РодительскийОбъект null, Объект A. connection1 поля : РодительскийОбъект A, Объект QW. connection2 поля : РодительскийОбъект null, Объект B. connection3 поля : РодительскийОбъект A, Объект RT. connection4 поля : РодительскийОбъект A, Объект YU. connection5 поля : РодительскийОбъект B, Объект IO. и так далее Помогите построить дерево. по этим данным списка объектов класса connection. Где нужно добавить поле "номер в иерархии". Пример с номером на изображении.
0
|
09.09.2016, 10:44 | |
Ответы с готовыми решениями:
26
Построить двоичное дерево Построить бинарное дерево Получить уровень каждого объекта в списке (построить дерево?) Построить бинарное дерево поиска.Вычислить сумму элементов, являющихся листьями |
162 / 150 / 59
Регистрация: 11.01.2016
Сообщений: 1,311
|
|
09.09.2016, 12:38 [ТС] | 2 |
help me
0
|
162 / 150 / 59
Регистрация: 11.01.2016
Сообщений: 1,311
|
||||||
09.09.2016, 13:24 [ТС] | 4 | |||||
MansMI, ты наверное не понял темы моей проблемы, хочу, чтобы на примере, продемонстрировали мне, как можно построить дерево сложно иерархическое, из списка данных.
0
|
09.09.2016, 14:17 | 5 | ||||||||||
UseMuse, вообще-то тебе совершенно справедливо подсказали, что для построения дерева нужно, чтобы было из чего его строить. То есть нужно создать узел дерева, который будет иметь свойство, представляющее из себя коллекцию таких же узлов. Массивы тут использовать - не лучшая идея, но принцип описан верно. Очень упрощенно:
Класс Connection, представляющий узел дерева
Пример имеет скорее схематический характер, но дерево, в принципе, должно получиться.
1
|
Warrior
500 / 427 / 177
Регистрация: 23.11.2014
Сообщений: 932
|
||||||
09.09.2016, 23:55 | 6 | |||||
В чем проблема то в обходе?
1
|
162 / 150 / 59
Регистрация: 11.01.2016
Сообщений: 1,311
|
||||||
10.09.2016, 21:25 [ТС] | 7 | |||||
diadiavova, _exp10der_, MansMI, kolorotur,
Коллеги, не будьте равнодушными, гляньте пжлст на моё дерево, мне кажется, что я что-то не так делаю)
0
|
10.09.2016, 22:33 | 8 | ||||||||||
Сообщение было отмечено UseMuse как решение
Решение
UseMuse, у тебя Parent не инициирован и родительский узел определяется его именем. Поэтому код построения видимо будет выглядеть так
1
|
162 / 150 / 59
Регистрация: 11.01.2016
Сообщений: 1,311
|
|
11.09.2016, 14:01 [ТС] | 9 |
diadiavova,
Можно на примере моего примера, как родительский узел определяется с помощью инициализации Parent, а не его именем.
0
|
11.09.2016, 14:08 | 10 | |||||
Здесь вопрос в том, когда и для чего тебе это надо. Можно сделать это во время построения дерева, вот так.
1
|
162 / 150 / 59
Регистрация: 11.01.2016
Сообщений: 1,311
|
||||||
11.09.2016, 14:26 [ТС] | 11 | |||||
Я данные получаю из xml, объект xml имеет атрибуты : Родитель, Дочерний.
Чтобы не замарачиваться с xml я создал коллекцию Data, которая получилась после сбора данных xml. Нужно построить k-мерное дерево по этим данным. Отобразить дерево в консоли. Покажите пожалуйста, как бы вы решили данную задачу, если можно то не отрывками, а Начиная с момента, когда вы имеете коллекцию Data, по которой нужно построить дерево. Добавлено через 2 минуты
0
|
11.09.2016, 14:33 | 12 |
Ну я бы изначально подошел к решению проблемы несколько иначе. Вот ты создал специальный класс для того, чтобы не заморачиваться с XML, а вот я бы наоборот возможности XML использовал бы по максимуму. В частности можно было бы использовать XSLT для приведения XML к виду, пригодному для десериализации, после чего дерево получил бы, десериализовав документ. Что касается твоего случая, то, насколько я могу судить, задача ведь решена уже. Что еще показывать-то?
Добавлено через 1 минуту Что значит в каком месте? У тебя уже есть метод BuildTree, я в него просто еще одну строчку добавил.
1
|
162 / 150 / 59
Регистрация: 11.01.2016
Сообщений: 1,311
|
|
11.09.2016, 14:53 [ТС] | 13 |
diadiavova,
проехали)
покажи пожалуйста, файл приложил
0
|
162 / 150 / 59
Регистрация: 11.01.2016
Сообщений: 1,311
|
|
11.09.2016, 14:56 [ТС] | 14 |
diadiavova, тут буквально в файле данных для примера чисто, маленькое дерево. Научиться бы
0
|
11.09.2016, 16:18 | 15 | |||||||||||||||
UseMuse, писать полный пример - малость муторно. Но, чтобы было понятно о чем речь...
Для того, чтобы это дело освоить надо для начала разобраться с XML-сериализацией, здесь читай документацию по классу System.Xml.Serialization.XmlSerializer. Кроме того, надо уметь программно выполнять преобразование документа с помощью XSLT, для этого изучай документацию по System.Xml.Xsl.XsltCompiledTransform. Ну и, соответственно, сам язык XSLT изучить придется. Твой пример я малость подправил, чтобы там был только один корневой элемент. Реализовать задачу с несколькими корнями несложно и это не принципиально, просто в этом случае понадобиться десериализация в коллекцию корневых узлов. Теперь это выглядит так
1
|
162 / 150 / 59
Регистрация: 11.01.2016
Сообщений: 1,311
|
|
11.09.2016, 16:34 [ТС] | 16 |
diadiavova, Спасибо большое! Проект бы пощупать
Добавлено через 4 минуты diadiavova, с помощью объекта Stream или XmlReader?
0
|
11.09.2016, 16:37 | 17 | ||||||||||
В документе были нестыковки. То ли разные алфавиты использовались, то ли что еще, но дерево было неправильным. Вот в таком виде строится.
А какая разница? Работай с тем, с чем тебе удобнее.
0
|
162 / 150 / 59
Регистрация: 11.01.2016
Сообщений: 1,311
|
||||||
11.09.2016, 17:28 [ТС] | 19 | |||||
diadiavova, Хочу отобразить преобразование в консоль, не пойму, в чем ошибка
0
|
11.09.2016, 17:39 | 20 |
UseMuse, а зачем ты преобразование в код засунул? Так оно не будет работать, хотябы даже из-за кавычек. То, что ты заменил двойные кавычки одинарными - ровным счетом ничего не меняет, поскольку там в самом документе этот прием используется: в значениях атрибутов выражения XPath, содержащие кавычки, используют одинарные кавычки из-за того, что значение атрибута обрамляется двойными. Когда ты двойные кавычки заменяешь одинарными, они просто преждевременно закрываются(пример в 55-ой строке).
0
|
11.09.2016, 17:39 | |
11.09.2016, 17:39 | |
Помогаю со студенческими работами здесь
20
Бинарное дерево: как происходит добавления элемента в дерево с двумя параметрами Преобразовать идеальное бинарное дерево в бинарное дерево поиска Построить дерево Построить дерево Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |