Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
Деревом называется неориентированный связный граф из N вершин и N-1 ребер. Из любой вершины до любой другой существует ровно один простой путь.
Корнем дерева будет называться такая вершина, от которой задано направление движения по дереву при его обходе.
Иначе необходимо вершину a или b к корню.
public static Control FindCommonAncestor(Control a, Control b) {
if (null == a)
throw new ArgumentNullException("a");
if (null == b)
throw new ArgumentNullException("b");
//
List<Control> visited = new List<Control>();
Control refA = a;
Control refB = b;
bool f = true;
for (;;) {
if (refA == refB)
return refA;
if (visited.Contains(refB))
return refB;
if (visited.Contains(refA))
return refA;
if (refA.Parent == null && refB.Parent == null)
return null;
if (f) {
if (refA.Parent != null) {
visited.Add(refA);
refA = refA.Parent;
}
} else {
if (refB.Parent != null) {
visited.Add(refB);
refB = refB.Parent;
}
}
f = !f;
}
}
Алгоритм поиска наименьшего общего предка в дереве