У меня есть древовидная структура, представленная ниже. У него есть узлы, являющиеся частью группы, а группа может иметь подгруппу. Структура представлена в XML следующим образом. Если передать какой-либо узел в этой структуре, нам нужно вернуть узел верхнего уровня в этой структуре. Например, просто если мы передаем Node3 id 1004, алгоритм должен вернуть Node1, Node2, Node3. Если мы передаем Node5 id 1008, то алгоритм должен возвращать все узлы GroupB <Node4,Node5,Node6>, а не только <Node5,Node6>. Предложите какой-нибудь эффективный алгоритм для получения корневого узла.
GroupA
-- Node1
-- Node2
-- Node3
GroupB
--Node4
--SubGroupB
--Node5
--Node6
GroupC
--Node7
XML representation
<GroupA>
<id>1001</id>
<Node1><id>1002</id></Node1>
<Node2><id>1003</id></Node2>
<Node3><id>1004</id></Node3>
<GroupB>
<id>1005</id></id>
<Node4><id>1006</id></Node4>
<sub-group>
<id>1007</id>
<Node5><id>1008</id></Node5>
<Node6><id>1009</id></Node6>
</sub-group>
<GroupC>
<id>1007</id>
<Node7><id>1010</id></Node6>
Вы ввели
id
как элемент. Поэтомуid
также будет узлом. Я бы определилid
как атрибут.Если нет порядка сортировки, на который вы можете положиться, вам придется пройтись по дереву, чтобы найти узел и вспомнить, в какой группе вы находитесь. Если есть порядок сортировки, вы должны использовать бинарный поиск. Не вижу, в чем здесь проблема.