Если я вас правильно понимаю, вы хотите узнать, как построить недвоичное дерево из идентификатора владельца и идентификатора родителя владельца, которые вы получаете из базы данных.Для этого вам нужно отдельно отслеживать корень дерева (экземпляр Owner).Затем вы добавляете API для добавления нового владельца в дерево, которое вызывается только в корне дерева.Этот API рекурсивно обходит дерево, пока не найдет правильного родителя для добавления.Вы также можете упорядочить дерево так, чтобы оно выполнялось быстрее, чем поиск по каждому узлу.
Вот хороший учебник по созданию дерева в C #.
Однако, в вашем простом примере выше я бы не рекомендовал дерево.Я бы порекомендовал добавить parentID в свой класс Owner, а затем использовать простой SortedList,Затем вы можете легко найти идентификатор, получить его родителя и пройти , как если бы у вас было дерево.Например:
void WalkUpTree(SortedList<int, Owner> tree, Owner node)
{
// (do something with node)
// process parent
if (node.parentID == 0 || tree.ContainsKey(node.parentID) == false)
return; // No parent
WalkUpTree(tree, tree[node.parentID]);
}
Если вы хотите пройти вниз по дереву, сохраните индекс корневого узла, а затем создайте второй SortedListгде int является родительским идентификатором, а не идентификатором.Затем WalkUpTree становится WalkDownTree с использованием второго SortedList.