Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

Построение сильноветвящегося дерева на основе таблицы отношений - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Программа которая не является консольной http://www.cyberforum.ru/cpp-beginners/thread334669.html
Используя динамический объект-список C++, написать программу вывода графических объектов на экран с последующим перемещением, используя динамическое выделение памяти. Нужно это реализовать в...
C++ Не могу переделать код Мне дана матрица коэффициентов системы линейных уравнений в необычном виде: Исходная СЛУ 4x1 + 2x2 + 9x3 = 1 x2 + 6x3 = 7 4x1 + 2x3 = 0 коэффициенты исходной СЛУ (1;4)(2;2)(3;9) (2;1)(3;6)... http://www.cyberforum.ru/cpp-beginners/thread334668.html
Напечатать "столбиком" все вхождения в предложение некоторого символа C++
Дано предложение.Составить программу,которая печатает "столбиком" все вхождения в предложение некоторого символа.
C++ Конструктор, немного не понятно
Всем привет. В одной книге наткнулся на пример с конструктором: #include "stdafx.h" #include <iostream> using namespace std; class balance { double cur_bal; char name; public:
C++ LoadLibrary http://www.cyberforum.ru/cpp-beginners/thread334650.html
Здравствуйте Нужно подгрузить мою .dll в память. #include <windows.h> HMODULE myDLL = LoadLibraryA("my.dll"); не компилится (error LNK1120: 1 неразрешенных внешних элементов) подскажите...
C++ Наследование Добрый день. Мне нужно реализовать такую структуру классов: есть класс 1, от него наследуются три класса: 2.1, 2.2, 2.3. От этих трех классов нужно множественно унаследовать класс 3. Не возникнет ли... подробнее

Показать сообщение отдельно
Aye Aye
367 / 281 / 36
Регистрация: 17.12.2009
Сообщений: 567
20.07.2011, 18:26
Необходима небольшая коррекция таблицы, надо добавить в нее [0 родитель 1] и [0 родитель 2].


Отсортировать таблицу отношений по возрастанию атрибута parent.
Пусть каждый узел дерева будет иметь свой уникальный номер как во волжении, буду называть его индексом.
Для первого значения атрибута pfrent выполняем:
-- Создаем корень с индексом, равным этому значению.
Для каждого значения атрибута parent (в том числе и для первого) выполняем:
-- Поиск узла с индексом, равным значению атрибута.
-- Cоздать его потомка с индексом = значению атрибута child, и добавить в список потомков узла.

Можно чуть-чуть по-другому.
Создать массив ссылок на узлы размером n-количество узлов (количество строк в таблице отношений).
Индекс элемента массива представляет собой индекс узла.
Пройти по массиву и создать все узлы.
Для каждой строки из таблицы выполнить:
C++
1
2
3
4
   ArrayOfNodePointers[Table[i].parent]->addChild( ArrayOfNodePointers[Table[i].child] );
   Node *root = ArrayOfNodePointers[0];
   Table.free();
   ArrayOfNodePointers.free(); // высвободить память под массивом, не освобождая узлы!
Дерево готово, указатель на его корень в переменной root.
Надеюсь понятно, но все равно прокомментирую:
Node - узел.
Node::addChild - добавить ребенка в список детей узла.
ArrayOfNodePointers - массив указателей на узлы.
Table - таблица отношений.
Table::operator[i] - оператор произвольного доступа с элементу таблицы.
1
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru