|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Junior Member
Iscritto dal: Jun 2013
Messaggi: 3
|
[Java] metodi ricorsivi
ho un albero binario:
class Albero { Albero left, right; int val; Albero(int i, Albero a, Albero b){ left=a; right=b; val=i; } } Esempio inizializzazione: Albero x=new Albero(3, new Albero(6,null,null),new Albero(2, null, new Albero(3,null,null))); Non riesco a capire come fare un metodo ricorsivo per visualizzare tutti gli elementi a distanza n dalla radice |
|
|
|
|
|
#2 | |
|
Senior Member
Iscritto dal: Apr 2010
Città: Leuven
Messaggi: 667
|
Quote:
Codice:
public class Node {
Node left;
Node right;
int val;
public Node(int value) {
this.val = value;
}
public void append(int val){
if(val>this.val){
if(this.right!= null){
this.right.append(val);
}
else{
this.right = new Node(val);
}
}//val>this.val
if(val<this.val){
if(this.left!=null){
this.left.append(val);
}
else{
this.left = new Node(val);
}
}//val<this.val
}//append
public void print(){
System.out.println(this.val);
if(this.right != null){
System.out.print("right= ");
this.right.print();
}
if(this.left != null){
System.out.print("left= ");
this.left.print();
}
}//print
public void print(int level){
if (level>0) {
System.out.println(this.val);
if (this.right != null) {
System.out.print("right= ");
this.right.print(level-1);
}
if (this.left != null) {
System.out.print("left= ");
this.left.print(level-1);
}
}
}//print
public static void main(String[]args){
Node a = new Node(5);
for(int i= 0; i<10;i++){
a.append(i);
a.append(i-5);
}
a.print();
a.print(2);
}
}
A parte gli scherzi, se non ti è chiaro te lo spiego con più dettagli
__________________
L'elettronica digitale non esiste, è solo elettrotecnica con interruttori piccoli!
|
|
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: Oct 2004
Messaggi: 1945
|
Io l'avrei fatto così, non l'ho provato ma più o meno dovrebbe essere così
Codice:
public void print(distanza, nodo){
if nodo == null
return
print(0, distanza, nodo);
}
private void print(current, distanza, nodo){
if current == distanza
stampa elemento
else
if nodo.left != null
print(current + 1, distanza, nodo.left)
if nodo.right != null
print(current + 1, distanza, nodo.right)
}
2) richiami il metodo print con la distanza corrente, quella richiesta e il nodo 3) se la distanza corrente è uguale a quella richiesta stampa 4) altrimenti, dopo aver verificato la presenza del nodo sinistro, effettua una chiamata ricorsiva a sinistra, incrementando il contatore della distanza corrente 5) idem com sopra per il destro @ingframin ma in quel modo non stampi tutti gli elementi che si trovano a meno di quella distanza? |
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: Apr 2010
Città: Leuven
Messaggi: 667
|
Io ho inteso la distanza come il numero di step a partire dal nodo radice.
In effetti credo di avere inteso male la domanda, nel senso che ho capito: "stampare tutti i nodi fino al raggiungimento della distanza". Per stampare solo quelli a distanza n basta usare il mio procedimento passando come parametro n+1 e poi usare print solo quando il contatore arriva a 0. Mi sa che ho preso una piccola cantonata stamattina
__________________
L'elettronica digitale non esiste, è solo elettrotecnica con interruttori piccoli!
|
|
|
|
|
|
#5 |
|
Junior Member
Iscritto dal: Jun 2013
Messaggi: 3
|
whoa, che rapidità : P
grazie delle risposte, riguardo la prima ci devo ragionare ancora su. la seconda l'ho sistemata per farla funzionare : P public void print(int distanza, Albero a){ if (a!= null) print(1, distanza, a); else System.out.println("Albero vuoto"); } private void print(int current,int distanza, Albero nodo){ if(nodo!=null) if (current == distanza) System.out.println(nodo.val); else{ if (nodo.left != null) print(current + 1, distanza, nodo.left); if (nodo.right != null) print(current + 1, distanza, nodo.right); } } |
|
|
|
|
|
#6 | |
|
Senior Member
Iscritto dal: Oct 2004
Messaggi: 1945
|
Quote:
|
|
|
|
|
|
|
#7 |
|
Junior Member
Iscritto dal: Jun 2013
Messaggi: 3
|
si scusate, nn trovavo come inserire il codice : P ho notato ora che toglie i tab inserendolo senza.
Codice:
public void print(int distanza, Albero a){
if (a!= null)
print(1, distanza, a);
else System.out.println("Albero vuoto");
}
private void print(int current,int distanza, Albero nodo){
if(nodo!=null)
if (current == distanza)
System.out.println(nodo.val);
else{
if (nodo.left != null)
print(current + 1, distanza, nodo.left);
if (nodo.right != null)
print(current + 1, distanza, nodo.right);
}
}
grazie mille penso che il topic sia risolto |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 20:57.




















