Originariamente inviato da melmar20
ciao a tutti, ho una struttura ad albero ennario e ho bisogno di alcune funzioni che calcolino il numero di foglie dell'albero, la profondità e il numero di nodi.
Ho fatto una ricerca ma non ho trovato niente di implementato.
Sapreste dirmi se c'è qualcosa che fa al caso mio e che ancora non sono riuscito a scovare???
Non hai precisato cosa contiene il tuo albero, quali classi hai usato e quali metodi offrono (la sua API in pratica) ecc.... Insomma .. non hai precisato nulla.
Allora ecco un esempio pratico che ho buttato giù al volo:
codice:
import java.util.*;
public class TreeTest {
public static void main(String[] args) {
TreeNode<String> radice = new TreeNode<String>("Radice");
TreeNode<String> a = new TreeNode<String>("A");
TreeNode<String> b = new TreeNode<String>("B");
TreeNode<String> c = new TreeNode<String>("C");
TreeNode<String> d = new TreeNode<String>("D");
TreeNode<String> e = new TreeNode<String>("E");
TreeNode<String> f = new TreeNode<String>("F");
TreeNode<String> g = new TreeNode<String>("G");
radice.addChild(a);
radice.addChild(b);
radice.addChild(c);
a.addChild(d);
a.addChild(e);
c.addChild(f);
f.addChild(g);
/*
Radice
/ | \
A B C
/ \ \
D E F
\
G
*/
System.out.println("numero foglie = " + numeroFoglie(radice));
}
public static int numeroFoglie(TreeNode<?> nodo) {
if (nodo.getChildCount() == 0) {
// È una foglia!
return 1;
} else {
// Non è una foglia
int count = 0;
for (int i = 0; i < nodo.getChildCount(); i++) {
count += numeroFoglie(nodo.getChild(i));
}
return count;
}
}
}
class TreeNode<E> {
private E element;
private ArrayList<TreeNode<E>> children;
public TreeNode(E element) {
this.element = element;
children = new ArrayList<TreeNode<E>>();
}
public E getElement() {
return element;
}
public int getChildCount() {
return children.size();
}
public TreeNode<E> getChild(int index) {
return children.get(index);
}
public void addChild(TreeNode<E> node) {
children.add(node);
}
}
Il programma stampa 4, che è il numero delle foglie (D E B G).
Come determinare le altre informazioni te lo lascio come esercizio .....