aggiunti algoritmi di visitazione albero in ampiezza, profondità (pre-ordine, post-ordine) e visita albero binario in ordine simmetrico

This commit is contained in:
Fabio Scotto di Santolo
2018-03-14 21:13:12 +01:00
parent 51465f1701
commit 1b7cfc0bcc
4 changed files with 106 additions and 152 deletions

View File

@@ -50,4 +50,35 @@ public abstract class AbstractBinaryTree<E> extends AbstractTree<E> implements B
return snapshot;
}
/**
* Aggiunge a snapshot le posizioni del sottoalbero avente radice position.
* @param position
* @param snapshot
*/
private void inorderSubtree(Position<E> position, List<Position<E>> snapshot) {
if(left(position) != null) inorderSubtree(left(position), snapshot);
snapshot.add(position);
if(right(position) != null) inorderSubtree(right(position), snapshot);
}
/**
* Restituisce una lista delle posizioni dell'albero, in ordine simmetrico
* @return lista delle posizioni in ordine simmetrico
*/
protected Iterable<Position<E>> inorder() {
List<Position<E>> snapshot = new ArrayList<>();
if(!isEmpty()) inorderSubtree(root(), snapshot);
return snapshot;
}
/**
* Restituisce una lista delle posizioni dell'albero
* @return lista delle posizioni.
*/
@Override
public Iterable<Position<E>> positions() {
return inorder();
}
}