Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.04.25;
Скачать: CL | DM;

Вниз

Есть дерево. Но не бинарное. :)   Найти похожие ветки 

 
Sat7 ©   (2002-04-12 11:59) [0]

Кто предложит оптимальную древовидную структуру для хранения (извиняюсь за каламбур) структуры директорий на винте и их поиска?
Задачка сводится к следующему: спроектировать класс, который хранит в себе структуру каталогов винта и функции их поиска. Единственное условие - поиск нужной директории в структуре должен идти рекурсивно. Я все-таки склоняюсь к связному списку, но здесь есть некоторые трудности. У бинарного дерева две ветки - правая и левая, по нему легко пройтись рекурсией. А обход дерева каталогов...
Подскажите, если кто-то имел с этим дело.


 
Anatoly Podgoretsky ©   (2002-04-12 12:09) [1]

Используй двухсвязный список, поля prev, next можешь назвать right, left


 
Alx2 ©   (2002-04-12 12:12) [2]

Связный список веток в глубину. мультидерево такое вот.


 
Виктор Щербаков ©   (2002-04-12 12:12) [3]

Может поможет:
http://algolist.manual.ru/ds/index.php


 
vovochka ©   (2002-04-12 12:17) [4]

TNode = record
Parent:TNode;
prev,next:TNode;
FirstChild,LastChild:TNode;

......

end;
У?


 
Бурундук   (2002-04-12 12:17) [5]

А почему всё-таки не бинарное? (firstchild, nextbrother)


 
Sat7 ©   (2002-04-12 12:29) [6]

vovochka © (12.04.02 12:17)

примерно то же самое я и делал.
Работает медленно, а именно в данном случае скорость очень важна...


 
vovochka ©   (2002-04-12 12:36) [7]

А где были тормоза?
HASH пробывал?


 
Sat7 ©   (2002-04-12 12:45) [8]

vovochka © (12.04.02 12:36)

Проблема в том, что поля parent, FirstChild и LastChild- чуть-чуть не то. Я ведь не знаю заранее сколько поддиректорий будет в директории, т.е. чтобы узнать это мне нужно их все перебрать и посмотреть, parent нужный или нет. Вот здесь тормоза и есть.


 
Игорь Шевченко ©   (2002-04-12 12:58) [9]

День добрый,

А TStringList не подходит, у которого в Objects для каждого каталога находится аналогичный TStringList с подкаталогами и так далее... ?

С уважением,


 
vovochka ©   (2002-04-12 13:28) [10]

2Sat7

Чёто я тебя совсем непонимаю.
По-моему это один из самых лучших вариантов. Что-то типа однонаправленного графа.
Где будут тормоза: при создании, поиске или где?


 
Sat7 ©   (2002-04-12 14:01) [11]

vovochka © (12.04.02 13:28)

Давай более общий случай рассмотрим. Представь, что тебе нужно сначала заполнить дерево, а потом посчитать сумму в узлах дерева, обойти все эти узлы. Но не обычного дерева - "Радость первокурсника", а дерева, у которого из одного узла отходит не две ветки, а заранее неизвестно сколько. Получается, что у нас есть: деревце, в узлах которого находятся значения, общую сумму которых нужно посчитать, и, собственно, узлы, из которых отходит несколько веток. Сколько веток будет - до заполнения не знаешь. Как ты станешь делать заполнение и обход узлов (подсчет суммы)?


 
vovochka ©   (2002-04-12 14:19) [12]

Ля, это просто список типа "радост первокурсника"! Обходишь все узлы по рекурсии и всё!

будет что-то типа:

function Calc(n:TNode):integer;
var
pc:TNode;
begin
result:=0;
pc:=n.FirstChild;
while pc<>nil do
begin
result:=result+pc.value;
if pc.FirstChild<>nil then result:=result+Calc(pc);
pc:=pc.next;
end;
//По моему всё должно работать.
end;

Так надо или мы друг друга непонимаем?


 
Бурундук   (2002-04-12 14:21) [13]

Любое дерево можно преобразовать в бинарное.
Собственно, в таком виде, как это предлагает vovochka ©
оно уже бинарное
(От каждого узла дерева отходят две ветки - FirstChild и Next).



Страницы: 1 вся ветка

Текущий архив: 2002.04.25;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.012 c
14-81067
fishka
2002-03-20 14:29
2002.04.25
Переписать игрушку с компашки с защитой. Можно ли это сделать, чтобы работало корректно?


1-80991
eSKey
2002-04-12 15:38
2002.04.25
Кто знает - шифрование и хранение пароля


14-81071
Алексей Петров
2002-03-18 16:54
2002.04.25
Периодически пролетает


1-80873
LazorenkoX
2002-04-11 11:58
2002.04.25
Русский язык в консоле


1-80954
Explorer
2002-04-11 12:14
2002.04.25
Дайте адресок сайта!