Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

вывод дерева

271
08 июля 2005 года
MrXaK
721 / / 31.12.2002
в-общем стандартная задача, только не помню как реализовывается, а реализовать надо очень срочно ))
в-общем, в бд(mysql) таблица с полями
id int
name text
parent int

допустим содержится что-то типа:
1 aaa 0
2 aab 1
3 bba 0
4 bbc 3
5 bcc 4
6 bbd 3
и т. д. в принципе данных очень много
нужно вывести всю эту таблицу в виде:
--aaa
----aab
--bba
----bbc
------bcc
----bbd
используя минимум запросов к базе данных... вложеность в принципе бесконечная...
11K
08 июля 2005 года
TheOS
14 / / 23.06.2005
Цитата:
Originally posted by Mr.Hacker
в-общем стандартная задача, только не помню как реализовывается, а реализовать надо очень срочно ))
в-общем, в бд(mysql) таблица с полями
id int
name text
parent int

допустим содержится что-то типа:
1 aaa 0
2 aab 1
3 bba 0
4 bbc 3
5 bcc 4
6 bbd 3
и т. д. в принципе данных очень много
нужно вывести всю эту таблицу в виде:
--aaa
----aab
--bba
----bbc
------bcc
----bbd
используя минимум запросов к базе данных... вложеность в принципе бесконечная...



Просто сначала прочитай все элементы из базы данных в массив, отсортируй их, далее - смотри код.
Доступ к элементам и их сортировку не писал - это всё зависит то реализации.
Пробелы куда-то деваются, так что прикрепил файл с программой - что бы читать было удобнее.
Программу не компилировал - так что могут быть опечатки

Код C++ ( если нужно на другом языке - пиши)

#include <string>
#include <vector>
#include <list>

// Структура, описывающая элемент из БД
struct Element
{
int ID;
int ParentID;
std::string Text;
};


// Элемент дерева
class Node
{
void PrintAll(int level); // Рекурсивно выводит дерево
public:
std::string Text;
std::vector<Node *> Childs;
Node * Parent;
Node(const Element & el); // Копирует данные из элемента
void BuildTree(std::vector<Element> & Elements);
void Print(ostream & output);
~Node();
};

void Node::BuildTree(std::vector<Element> & Elements)
{
// Создаём все Node хранящие Element
for(std::vector<Element>::iterator i = Elements.begin(); i != Elements.end(); i++)
{
Childs.push_back(new Node(Elements));
}
// Сопоставляем всем элементам дерева родителей
for(size_t i = 0; i != Childs.size(); i++)
{
if(Elements.ParentID != 0) // Если имеет роодителя
{
// Устанавливаем родителя
Childs->Parent = Childs[Elements.ParentID - 1];
// Добавляем элемент в список детей родителя
Childs->Parent->Childs.push_back(Childs);
}
else
Childs->Parent = NULL;
}
// Удаляем из списка "детей" элементы, кроме тех,
// которые не имеют родителя
for(size_t i = 0; i < Childs.size();; )
{
if(Childs->Parent != NULL)
{
Childs.erase(Childs.begin() + i);
}
else
i++;
}
}

void Node::PrintAll(std::ostream & out, int level)
{
for(int i = 0; i < level; i++)
out<<'-';
level++; // "ребёнок" будет рисоваться правее предка
// Выводим стоку (данные)
out<<Text<<std::endl;
// Выводим всех "детей"
for(std::vector<Node *>::iterator i = Childs.begin(); i != Childs.end(); i++)
{
(*i)->PrintAll(out,level);
}
}

void Node::Print(std::ostream & out)
{
PrintAll(out,0);
}

271
08 июля 2005 года
MrXaK
721 / / 31.12.2002
сенкс, только мне бы на пхп ))
хотя попробую портировать)) может получится)
259
08 июля 2005 года
AlexandrVSmirno
1.4K / / 03.12.2004
Цитата:
Originally posted by Mr.Hacker
сенкс, только мне бы на пхп ))
хотя попробую портировать)) может получится)


Тогда тебе на http://progers.ru

89K
05 февраля 2013 года
0603sparks
3 / / 05.02.2013
помогите пожалуйста, реализовать графическое отображение текстового файла в виде дерева, с возможностью раскрывать и закрывать ветви дерева, за ранее благодарю
360
05 февраля 2013 года
P*t*
474 / / 15.02.2007
Цитата: 0603sparks
помогите пожалуйста, реализовать графическое отображение текстового файла в виде дерева, с возможностью раскрывать и закрывать ветви дерева, за ранее благодарю



Конечно поиском по форуму нужно пользоваться, но не до такой же степени чтобы постить в темы 8-и летней давности! Тем более, что заданный вопрос к теме этой ветки имеет очень отдаленное отношение.

И еще - с такой постановкой вопроса вам никто не поможет. Максимум - посоветуют готовый компонент (если, конечно, вы догадаетесь указать операционную систему и язык программирования).

89K
18 февраля 2013 года
0603sparks
3 / / 05.02.2013
Задание на С++, ОС Windows
Новичок в программировании, дали задание в универе. Вот само задание:

Дан структурированный многострочный текстовый фай, где каждая строка имеет формат:
Код#Текст#Код родителя <ПС>
где:
-«Код» - число (не более 6 цифр);
-«#» - знак-разделитель;
-«Текст» - не более 50 знаков, кроме «#»;
-«Код родителя»-число-код предшествующей строки;
-«<ПС>»-знак перевода строки.

В тексте все строки связаны между собой через код родителя. В данных текста заложено некоторое «дерево» информации с произвольным количеством «ветвей» (уровней).

1 # 1.Материалы #
2 # 1.1.Группа 1 # 1
3 # 1.1.1.Материал 1 # 2
4 # 1.1.2 Материал 2 # 2
5 # 1.1.3 Материал 3 # 2
6 # 1.1.4 Материал 4 # 2
7 # 1.2.Группа 2 # 1
8 # 1.2.1.Материал 5 # 7
9 # 1.2.2 Материал 6 # 7
10 # 2.Комплектующие #
11 # 2.1.КомГруппа1 # 10
12 # 2.1.1.Комплект 1 # 11
13 # 2.1.2 .Комплект 2 # 11
14 # 2.1.3 ПодКомГруппа 11
15 # 2.1.3.1 Комплект 3# 14
16 # 2.1.3.2 Комплект 4 14
17 # 2.2 КомГруппа 2 # 10
18 # 2.2.1 Комплект 5 # 17
19 # 2.2.2 Комплект 6 # 17

Разработать программный модуль, реализующий графическое отображение структуры данных, позволяющее на экране раскрывать и закрывать отдельные «ветви дерева» в соответствии с примером

-1.Материалы
-1.1.Группа 1
1.1.1.Материал 1
1.1.2 Материал 2
1.1.3 Материал 3
1.1.4 Материал 4
+1.2.Группа 2
+2.Комплектующие
89K
20 февраля 2013 года
0603sparks
3 / / 05.02.2013
помогите чем можете очень надо

Знаете кого-то, кто может ответить? Поделитесь с ним ссылкой.

Ваш ответ

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог