Salve,sto cercando di implementare un albero binario di ricerca qualcuno mi può aiutare ad implementare il metodo di rimozione di un nodo ,gentilmente ,mi perdo quando il nodo da eliminare non è una foglia
?
codice:
public class NodoBin {
private int dato;
private NodoBin figlioSx;
private NodoBin figlioDx;
NodoBin(int d) {
figlioDx=null; figlioSx=null;
dato=d;
}
public void inserimNodoInterno(int val){
if(val<=dato){
if(figlioSx!=null)
figlioSx.inserimNodoInterno(val);
else
figlioSx = new NodoBin(val);
}
else{
if(figlioDx!=null)
figlioDx.inserimNodoInterno(val);
else
figlioDx = new NodoBin(val);
}
}
public int getDato() {
return dato;
}
public NodoBin getFiglioDx() {
return figlioDx;
}
public NodoBin getFiglioSx() {
return figlioSx;
}
}
public class AlberoBin {
private NodoBin radice;
private LinkedList<NodoBin> visitatiPILA; //per DFS o visita in profondita
private LinkedList<NodoBin> visitatiCODA;//per BFS o visita in ampiezza
public AlberoBin() {
radice=null; visitatiPILA=new LinkedList<NodoBin>();
}
public NodoBin getRadice() {
return radice;
}
public boolean alberoVuoto(){
if(radice ==null)return true;
return false;
}
public void insNodo(int v){
if( alberoVuoto() )
radice = new NodoBin(v);
else
radice.inserimNodoInterno(v);
}
public void stampaNodi(){
if( alberoVuoto() ) return ;
stampa(radice);
}
//VISITA IN PROFONDITA
public void visitaIterativaDFS(){
visitatiPILA.add(radice);
while(! visitatiPILA.isEmpty()){
NodoBin nodoPrelevato= visitatiPILA.pop();
if(nodoPrelevato!= null)
System.out.println( "valutazione del nodo"+ nodoPrelevato.getDato() );
if(nodoPrelevato.getFiglioSx()!=null)
visitatiPILA.push(nodoPrelevato.getFiglioSx());
if(nodoPrelevato.getFiglioDx()!=null)
visitatiPILA.push(nodoPrelevato.getFiglioDx());
}
}
public void visitaIterativaBFS(){
visitatiCODA.add(radice);
while(!visitatiCODA.isEmpty()){
NodoBin prelevato= visitatiCODA.pop();
if(prelevato!= null)
System.out.println(prelevato.getDato());
if(prelevato.getFiglioSx()!=null)
visitatiCODA.add(prelevato.getFiglioSx());
if(prelevato.getFiglioDx()!=null)
visitatiCODA.add(prelevato.getFiglioDx());
}
}
public void eliminaNodi( ){
}
public void stampa(NodoBin n){
if(n== null)
return ;
stampa(n.getFiglioSx());
stampa(n.getFiglioDx());
}
public class AvviaAlbero {
public static void main(String[] args) {
AlberoBin A1 =new AlberoBin();
A1.insNodo(1);
A1.insNodo(2);
A1.insNodo(1);
A1.insNodo(1);
A1.insNodo(3);
A1.insNodo(4);
A1.stampaNodi();
A1.visitaIterativaDFS();
}
}