Суммирование по деревьям
Суммирование по деревьям
Суммирование по деревьям Нужно использовать рекурсивные механизмы спуска по дереву и иметь метод определения наличия child узлов у текущего узла. На примере TTreeView( идея) GetResultForNode(node)) - ваша функция определения значения чего-либо для текущего узла. function TDBTreeView.RecurseChilds(node: TTreeNode): double; begin while node <> nil do begin if node.HasChildren then Result := RecurseChilds(node.GetFirstChild); Result := Result + GetResultForNode(node)); node := node.GetNextSibling; end; function TDBTreeView.GetResult(curnode: TTreeNode;): double; begin Result := 0; if curnode = nil then Exit; Result := RecurseChilds(curnode.GetFirstChild); end; Эту идею можно распространить и на БД, естественно с написанием своих методов поиска child и навигации по ним. Более широкие возможности здесь в случае применения SQL-запросов. Но нужны специальные способы организации структуры, т.к. простейший, с использованием ID и PARENT не слишком функционален.