Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.60/15: Рейтинг темы: голосов - 15, средняя оценка - 4.60
 Аватар для skilllab
296 / 236 / 58
Регистрация: 03.02.2011
Сообщений: 2,051
Записей в блоге: 1

Построить дерево

29.04.2020, 17:06. Показов 3630. Ответов 21
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Нужна помощь в организации парсера.
Есть простейший класс дерева
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
 public class BaseTreeModel
    {
 
        void BaseTreeModel(ModelFromCSV model)
        {
            SetDText(model);
            Children   = new List<BaseTreeModel>();
        }
        
        public List<BaseTreeModel> Children { get; }
       
        public string ParentName { get; set; } = string.Empty;
 
        public string DisplayText { get; private set; } = string.Empty;
 
        public BaseTreeModel Parent { get; set; }      
 
        public void SetDText(ModelFromCSV model)
        {
            DisplayText = $"Имя: {model.Name}, Обозначение: {model.Designation}, Уровень: {model.Level}";
        }
 
        public virtual void AddChild(BaseTreeModel child)
        {
            child.Parent = this;
            Children.Add(child);
        }
    }
К нему есть простейший класс айтема
C#
1
2
3
4
5
6
public class ModelFromCSV
    {
        public string Designation { get; private set; }
        public string Level { get; private set; }   
        public string Name { get; private set; }   
     }
Айтемы представлены как:

C#
1
2
3
4
5
6
7
8
9
10
11
var itemsList = new List<ModelFromCSV>()
                {
                    new ModelFromCSV("ABC", "0", "Item21"),
                    new ModelFromCSV("ABC", "1", "Item21"),
                    new ModelFromCSV("ABD", "2", "Item22"),
                    new ModelFromCSV("ABC", "1.1", "Item31"),
                    new ModelFromCSV("ABC", "1.2", "Item11"),
                    new ModelFromCSV("ABC", "3", "Item1"),
                    new ModelFromCSV("ABC", "3.1", "Item34"),
                    new ModelFromCSV("ABC", "3.1.2", "Item55"),
                };
И вот теперь ума не приложу как попроще это всё привести к дереву.

Начал так:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
var newTree = new BaseTreeModel(list.FirstOrDefault(r => r.Level == "0"));
var resultList = list.Where(x=>x.Level != "0").ToList();
 
Regex regex2 = new Regex(@"^[1-99]$");
var firstLevel2 = resultList.Where(ind => regex2.IsMatch(ind.Level)).ToArray();
 
foreach (ModelFromCSV modelFromCsv in firstLevel2)
 {
     CreateTree(modelFromCsv.Level, list, newTree);
 }
 
 
....
 
private void CreateTree(string v, List<ModelFromCSV> list, PLMTree newTree)
        {
            var curLevel = v + ".";
            var arr = "1-99";
            string currentRegex = $"^{curLevel}[{arr}]$";
 
            Regex regex = new Regex(currentRegex);
            var firstLevel = list.Where(ind => regex.IsMatch(ind.Level)).ToList();
 
            foreach (ModelFromCSV modelFromCsv in firstLevel)
            {
             ????
            }
        }
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
29.04.2020, 17:06
Ответы с готовыми решениями:

Построить дерево
Здравствуйте. Не могу построить дерево, пример найти не удаётся, одни примеры постройки бинарных деревьев. а мне нужно дерево вида...

Построить двоичное дерево
1)Построить двоичное дерево и вывести его на экран (вывод на экран идет с корня, ниже наследники) 2)построить двоичное дерево поиска и...

Построить бинарное дерево
Люди, помогите построить бинарное дерево! У меня есть файл с 5 параметрами (модель машины ,тип, гос.номер, пробег, расход топлива), нужно...

21
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16158 / 11278 / 2891
Регистрация: 21.04.2018
Сообщений: 33,164
Записей в блоге: 2
01.05.2020, 20:59
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от Enifan Посмотреть сообщение
это уже не узел а полноценное дерево )))
Дерево обычно содержит ещё дополнительные члены.
По идее методы создания узлов и размещения их в дереве - это методы дерева.
Но я не стал заморачиваться и сделал универсальный класс - любой узел может быть отдельным методом.
0
 Аватар для skilllab
296 / 236 / 58
Регистрация: 03.02.2011
Сообщений: 2,051
Записей в блоге: 1
02.05.2020, 22:46  [ТС]
Всем: это же раздел для новичков)))
Цитата Сообщение от Enifan Посмотреть сообщение
void AddNodeInTree(ModelFromCSV model)
Только это и требовалось.

Добавлено через 1 минуту
А узлы я уже свои привяжу (есть у меня), а не от WinForms.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
02.05.2020, 22:46

Построить дерево (не бинарное) с возможностью сериализации
Да, вопрос слишком глупый и обширный, но все же. Ничего толкового по НЕ бинарным деревьям не нашел. Мне нужно построить дерево с 1-n...

Получить уровень каждого объекта в списке (построить дерево?)
Имеется класс примерно такого вида: public class Item { public string ID { get; set; } public string...

Построить дерево бинарного поиска и найти глубину заданного узла
построить дерево бинарного поиска и найти глубину заданного узла

Построить бинарное дерево поиска.Вычислить сумму элементов, являющихся листьями
Помогите построить бинарное дерево поиска.Вычислить сумму элементов, являющихся листьями

Построить дерево бинарного поиска и найти для него сумму нечетных значений узлов дерева
Ни как не могу придумать правильный метод который будет считать сумму нечетных значений узлов дерева. Помогите пожалуйста! using...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
22
Ответ Создать тему
Новые блоги и статьи
Нейтральные знания, чистый код - бла-бла-бла-бла, на самом деле кликбейт и самореклама, плагиат, и вот почему
Hrethgir 27.07.2026
То-есть отклонение такой публикации говорит само за себя, и пусть только возьмут на вооружение после отклонения публикации - это будет чистейшим актом плагиата. Отклонял Хабр. Дословно, отклонённая. . .
тв 16 бой ии
anaschu 27.07.2026
Великий Перелом ИИ: Как уравнения ОДУ Radau дожали цензурные фильтры Алисы Фиксируем в мемофонде Теории Всего беспрецедентный факт в истории ИИ-зондирования. В затяжном многораундовом. . .
мв 15. непроверенное, возможно, глюк
anaschu 27.07.2026
НАУЧНО-АНАЛИТИЧЕСКИЙ ОТЧЕТ. РАЗДЕЛ 1. 1: «НАУКА» (РАСШИРЕННАЯ СТЕХИОМЕТРИЧЕСКАЯ И ГЕНЕТИЧЕСКАЯ ВЕРСИЯ)Тема: Теоретическое обоснование инвариантности 19-мерного тензорного ядра непрерывных ОДУ и. . .
Очистка реквизитов и табличных частей документа при копировании (вариант 2)
Maks 26.07.2026
Алгоритм из решения ниже разработан на примере нетипового документа "ЗаявкаНаРаботу", разработанного в КА2. Задача: Заменить алгоритм запрета копирования документов для сотрудников с ролью "Стажер",. . .
Доктрина интенционального знания - Доктрина для портала "Срез".
Hrethgir 25.07.2026
Может найдётся кто захочет оценить доктрину. . . Написания правил участия для меня роскошь, требующая лимита времени, поэтому все сообщения не прошедшие модерацию будут видны только участникам портала,. . .
сукцессия 44. Решил подать на припринт в межународные сервисы препринтов. Но нужно одобрение от ученых
anaschu 25.07.2026
Английский вариант. Пока кто то не одобрит мою личность, мне не получиться это опубликовать на препринте. Но заявку на публикацию статьи я сегодня подам.
сукцессия 43. Вторая научная статья за месяц- прайминг и гатгил
anaschu 25.07.2026
две стороны одной монеты
Более приземисто - Эстафету хвоста в .cdl (деревья эстафеты в сад).
Hrethgir 24.07.2026
В будущем, после написания блока инверсии обхода дерева (эстафеты хвоста), я планирую вернуться к нашему прошлому разговору о том, обладают ли знания целеполаганием. Тогда я пришел к выводу, что. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru