parser

Написать ответ на текущее сообщение

 

 
   команды управления поиском

Раскрывающееся дерево. Построение дерева рекурсией?

tricord 11.07.2005 17:09 / 11.07.2005 17:10

Не могу построить раскрывающееся дерево (хочу изменить Мишин пример – там дерево строится уже раскрытым).
Алгоритм понимаю:
1. находим всех родителей необходимого id, засовываем в таблицу или хэш.
2. строим дерево рекурсией раскрывая только те ветки, которые находятся в таблице (хэш) полученном на 1 этапе.
Первый шаг сделал: хэш получил:
@getParentsForIdHash[id]
$MessageById[^getMessageById[$id]]
$MessageByThread[^getMessagesByThread[$MessageById.thread_id]]
$parentsMessageByThread[^hash::create[]]
$str_hash[^MessageByThread.hash[forum_message_id]]
$pid($id)
^while($pid){
  ^parentsMessageByThread.add[
    $.[$pid][$pid]
  ]
  $pid($str_hash.[$pid].parent_id)
}
Но оказалось что в хэш значения не сортируются.
Переделал на таблицу:
@getParentsForIdTable[id]
$MessageById[^getMessageById[$id]]
$MessageByThread[^getMessagesByThread[$MessageById.thread_id]]
$parentsMessageByThread[^table::create{forum_message_id	parent_id	thread_id}]
$pid($id)
^while($pid){
  $MessageById[^getMessageById[$pid]]
  ^parentsMessageByThread.append{$MessageById.forum_message_id	$MessageById.parent_id	$MessageById.thread_id}
  $pid($MessageById.parent_id)
}
А вот со вторым шагом получилась загвоздка. Не могу построить дерево рекурсией. Нужна помощь в его построении.