![]() |
Модераторы: Partizan, gambit |
![]() ![]() ![]() |
|
Cybernetic10 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 19 Регистрация: 5.5.2009 Репутация: нет Всего: нет |
Нужно создать дерево, причем вершина должна смотреть на своего родителя, а так же на список своих детей.
После С++ я написал вот такую структур: struct Node { /* какие то мои данные в вершине */ public Node* parent; public List<Node>* child; } Но нифига не заработало. Сначала студия попросила поставить спецификатор к указателям unsafe и позволить ей копмилировать неверифицируемый код, включив параметр /unsafe. Сделал. Но и это не помогло. Ошибка такая: Cannot take the address of, get the size of, or declare a pointer to a managed type ('SequentialDecoding.Node'). Собсно, вопрос. А правильно ли я вообще пытаюсь создать дерево? Можно ли как то по другому в шарпе работать с указателями, и правильно ли я вообще работаю с ними в данном контексте? |
|||
|
||||
ДобренькийПапаша |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1278 Регистрация: 14.1.2006 Где: г.Москва Репутация: нет Всего: 7 |
А зачем вы вообще пытаетесь работать с указателями? В C# у компонента TreeNode огромное количество методов и свойств...
currentNode.Parent - родительский узел, currentNode.Nodes - коллекция подузлов текущего узла... Это сообщение отредактировал(а) ДобренькийПапаша - 17.8.2009, 11:10 -------------------- Меня зовут Себастьян Парейра, торговец чёрным деревом. |
|||
|
||||
Cybernetic10 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 19 Регистрация: 5.5.2009 Репутация: нет Всего: нет |
Да чтоб я знал про эту компоненту ![]() Сейчас почитаю о ней в МСДН Это сообщение отредактировал(а) Cybernetic10 - 17.8.2009, 11:10 |
|||
|
||||
ДобренькийПапаша |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1278 Регистрация: 14.1.2006 Где: г.Москва Репутация: нет Всего: 7 |
Я написал свойства вам нужные, гляньте ещё раз))) я просто пост редактил)))
-------------------- Меня зовут Себастьян Парейра, торговец чёрным деревом. |
|||
|
||||
Cybernetic10 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 19 Регистрация: 5.5.2009 Репутация: нет Всего: нет |
Что-то в консольном приложении глухо с пространством имен System.Wndows.Forms, и соответственно с классом TreeNode.
Как мне увидеть данное пространство? И ничего, что мое дерево никоим образом не будет работать с окнами? |
|||
|
||||
ДобренькийПапаша |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1278 Регистрация: 14.1.2006 Где: г.Москва Репутация: нет Всего: 7 |
чего... Так работать не будет))) Что-то я не припомню, чтобы я видел деревья в консолях (хотя наверно такое есть)... -------------------- Меня зовут Себастьян Парейра, торговец чёрным деревом. |
|||
|
||||
Cybernetic10 |
|
||||
Новичок Профиль Группа: Участник Сообщений: 19 Регистрация: 5.5.2009 Репутация: нет Всего: нет |
Ну, мне просто нужна специфическая такая структура для хранения данных и быстрого поиска. И нафик всякие окна. Тогда как быть с указателями, если TreeNode не юзать? |
||||
|
|||||
neutrino |
|
||||
![]() Gothic soul ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 3041 Регистрация: 25.3.2002 Где: Верхняя Галилея, Кармиэль Репутация: 3 Всего: 62 |
Добавлено через 2 минуты и 35 секунд Я этo навскидку написал. Может не компилится. Должно вывести дерево Авраама в таком виде:
-------------------- The truth comes from within ... Покойся с миром, Vit |
||||
|
|||||
diadiavova |
|
||||
![]() Доктор Зло(диагност, настоящий, с лицензией и полномочиями) ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 5821 Регистрация: 14.8.2008 Где: В Коньфпольте Репутация: 31 Всего: 142 |
neutrino, при таком подходе возможны следующие неприятности:
Коллекция, вкоторой находится узел, не согласована со свойством Parent, а стало быть существует возможность, что узел будет в одной коллекции, а свойство парент вернёт совсем другого родителя. Коллекция List может содержать элементы, уже находящиеся в других таких же коллекциях, в результате один и тот же узел может оказаться потомком сразу нескольких узлов. Вручную за всем этим хозяйством уследить сложно, а стало быть вероятны труднообнаруживаемые ошибки. Лучше сделать примерно так. На тесте вроде всё работает правильно ![]()
Добавлено через 2 минуты и 18 секунд Выводит следующее
-------------------- Хочешь получить мудрый совет - читай подписи участников форумов. Злой доктор Щасзаболит ![]() |
||||
|
|||||
neutrino |
|
|||
![]() Gothic soul ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 3041 Регистрация: 25.3.2002 Где: Верхняя Галилея, Кармиэль Репутация: 3 Всего: 62 |
diadiavova, да, конечно. Я просто провел параллель с кодом топикстартера. Конечно твоя модель с Method Factory лучше, удобней и безопасней. Я подумал, что ICollection дает много flexibility... Можно конечно сделать generic:
Тогда есть и гибкость и безопасность. -------------------- The truth comes from within ... Покойся с миром, Vit |
|||
|
||||
diadiavova |
|
|||
![]() Доктор Зло(диагност, настоящий, с лицензией и полномочиями) ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 5821 Регистрация: 14.8.2008 Где: В Коньфпольте Репутация: 31 Всего: 142 |
neutrino, ну там, вообще-то, главная фишка - сама коллекция, где отлавливается добавление/удаление элементов и идёт работа с парентом. Я сопсно об этом, остальное это просто, чтобы в примере сформировать дерево быстрее.
Добавлено через 5 минут и 33 секунды То есть в примере я этого явно не показал, но если просто узел добавить в коллекцию Children, то свойство парент будет установлено автоматически(в коллекции). Вот я о чём ![]() -------------------- Хочешь получить мудрый совет - читай подписи участников форумов. Злой доктор Щасзаболит ![]() |
|||
|
||||
Rohoss |
|
|||
![]() Начальник интернета ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1308 Регистрация: 9.10.2006 Где: Matrix Репутация: 2 Всего: 18 |
А зачем изобретать велосит, а не использовать скажем классы для работы с xml? Чем не дерево?
|
|||
|
||||
diadiavova |
|
|||
![]() Доктор Зло(диагност, настоящий, с лицензией и полномочиями) ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 5821 Регистрация: 14.8.2008 Где: В Коньфпольте Репутация: 31 Всего: 142 |
Ну я, скорее всего, так и сделал бы. Но кому-то, возможно, это не подходит. -------------------- Хочешь получить мудрый совет - читай подписи участников форумов. Злой доктор Щасзаболит ![]() |
|||
|
||||
ReFLeXive |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 120 Регистрация: 30.3.2009 Где: г. Уфа Репутация: нет Всего: 1 |
Скажите плиз, а указанный выше способ подойдет для построения идеально сбалансированного дерева?
Помимо построения, мне необходимо вывести такое дерево графически. Подскажите плиз в каком направлении двигаться PS. Решил не плодить новые темы с этой проблемой - воспользовался поиском и написал тут))) |
|||
|
||||
diadiavova |
|
|||
![]() Доктор Зло(диагност, настоящий, с лицензией и полномочиями) ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 5821 Регистрация: 14.8.2008 Где: В Коньфпольте Репутация: 31 Всего: 142 |
Вообще-то тут речь шла не о бинарных деревьях. В бинарном дереве у каждого узла есть только два подузла, а не целая коллекция и соответственно лучше для каждого подузла создать собственное свойство(например Left и Right). Что до графического вывода, то из стандартных инструментов есть только TreeView, а если не подходит, то или рисовать самому, или искать готовый контрол на стороне.
-------------------- Хочешь получить мудрый совет - читай подписи участников форумов. Злой доктор Щасзаболит ![]() |
|||
|
||||
![]() ![]() ![]() |
Прежде чем создать тему, посмотрите сюда: | |
|
Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов. Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :) Так же не забывайте отмечать свой вопрос решенным, если он таковым является :) Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |