У меня есть класс TreeNode, который представляет узел в дереве и класс LinkedTree. В этом я хочу получить список с каждым предком узла. В каждом узле я сохраняю значение, узел родителя и список со всеми дочерними элементами. Поэтому я должен иметь возможность получить список предков с родителем в узле, родителем этого узла и т. Д.
Я попробовал это рекурсивно. Вот две версии моего кода:
Версия 1:
public List<Position<E>> ancestors(Position<E> p) throws
InvalidPositionException {
if(invalidPosition(p)) {
throw new InvalidPositionException("Position is not in the current
tree");
}
List<Position<E>> ancestors = new ArrayList<>();
if(!isRoot(p)) {
ancestors.add(((TreeNode<E>) p).getParent());
ancestors(((TreeNode<E>) p).getParent());
}
return ancestors;
}
Версия 2:
public List<Position<E>> ancestors(Position<E> p) throws
InvalidPositionException {
List<Position<E>> ancestors = new ArrayList<>();
if(isRoot(p)) {
return ancestors;
}
for(Position<E> e : positions()) {
ancestors.add(((TreeNode<E>) e).getParent());
if(e.equals(p)) {
ancestors(((TreeNode<E>) e).getParent());
}
}
return ancestors;
}