Livelli
This commit is contained in:
89
Alberi1/src/Main.java
Normal file
89
Alberi1/src/Main.java
Normal file
@@ -0,0 +1,89 @@
|
||||
class Nodo{
|
||||
int dato;
|
||||
Nodo left, right;
|
||||
|
||||
public Nodo(int dato, Nodo left, Nodo right) {
|
||||
this.dato = dato;
|
||||
this.left = left;
|
||||
this.right = right;
|
||||
}
|
||||
|
||||
static void stampa(Nodo n, int livello, String lr) {
|
||||
if(n==null) return;
|
||||
for(int i=0;i<livello-1;i++)
|
||||
System.out.print("\t");
|
||||
if(livello!=0) System.out.print("+------->");
|
||||
System.out.println(n.dato+lr);
|
||||
stampa(n.left, livello+1,"L");
|
||||
stampa(n.right, livello+1,"R");
|
||||
}
|
||||
|
||||
/*
|
||||
0) fissate l'intestazione della funzione e
|
||||
pensate che esista già e che funzioni
|
||||
1) caso base, trovare un caso in cui la risposta
|
||||
è ovvia e non serve computazione
|
||||
2) cosa fare col dato attuale e cosa fare con i rimanenti
|
||||
|
||||
*/
|
||||
|
||||
static int somma(Nodo albero) {
|
||||
if(albero==null) return 0;
|
||||
return albero.dato+somma(albero.left)+somma(albero.right);
|
||||
}
|
||||
|
||||
static int conta(Nodo albero) {//conta quanti sono i nodi
|
||||
if(albero==null) return 0;
|
||||
return 1+conta(albero.left)+conta(albero.right);
|
||||
}
|
||||
|
||||
static int contaFoglie(Nodo albero) {//conta quanti sono le foglie (nodi senza figli)
|
||||
if(albero==null) return 0;
|
||||
if (albero.left == null && albero.right == null) {
|
||||
return 1;
|
||||
} else {
|
||||
return contaFoglie(albero.left) + contaFoglie(albero.right);
|
||||
}
|
||||
}
|
||||
|
||||
static Nodo insOrd(int val, Nodo albero) {
|
||||
if(albero==null) return new Nodo(val, null, null);
|
||||
if(val>albero.dato) return
|
||||
new Nodo(albero.dato, albero.left, insOrd(val, albero.right));
|
||||
return new Nodo(albero.dato, insOrd(val, albero.left), albero.right);
|
||||
}
|
||||
static boolean trova(Nodo albero, int valore) {
|
||||
if(albero==null) return false;
|
||||
else if(albero.dato==valore) return true;
|
||||
else return trova(albero.left, valore) || trova(albero.right, valore);
|
||||
}
|
||||
static String valoriNelLivello(Nodo albero, int livello){
|
||||
if(albero==null) return "";
|
||||
else if(livello==0) return albero.dato + "";
|
||||
else return valoriNelLivello(albero.left, livello-1) + valoriNelLivello(albero.right, livello-1);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
public class NodoMain {
|
||||
public static void main(String[] args) {
|
||||
Nodo n1 = new Nodo(10, null, null);
|
||||
Nodo n2 = new Nodo(5, null, null);
|
||||
Nodo n3 = new Nodo(30, null, null);
|
||||
|
||||
n1.left = n2;
|
||||
n1.right = n3;
|
||||
|
||||
// Nodo.stampa(n1,0);
|
||||
|
||||
Nodo n4 = Nodo.insOrd(23, n1);
|
||||
n4 = Nodo.insOrd(1, n4);
|
||||
Nodo.stampa(n4,0,"");
|
||||
System.out.println("Nodi: " + Nodo.conta(n4));
|
||||
System.out.println("Foglie: " + Nodo.contaFoglie(n4));
|
||||
System.out.println("Somma: " + Nodo.somma(n4));
|
||||
System.out.println("Trovato 24? " + Nodo.trova(n4,24));
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user