public class Arbol{
private NodoA raiz;
public boolean empty(){
if(getRaiz()==null){
return true;
}
return false;
}
public void insert(NodoA dato){
NodoA aux=getRaiz();
if(empty()){
setRaiz(dato);
}else{
do{
if(dato.getDescripcion().compareTo(aux.getDescripcion())<0){
if(aux.getIzq()==null){
aux.setIzq(dato);
}else
aux=aux.getIzq();
}else{
if(aux.getDer()==null){
aux.setDer(dato);
}else
aux=aux.getDer();
}
}while(aux.getDer()!=dato && aux.getIzq()!=dato);
}
}
public nodo eliminar(String num){
nodo aux=getRaiz();
nodo padre=getRaiz();
while(aux!=null && aux.getNo_control().compareTo(num)!=0){
padre=aux;
if(num.compareTo(aux.getNo_control())<0){
aux=aux.getIzq();
}else
aux=aux.getDer();
}
if(aux==null){
return aux;
}
if(aux.getDer()==null && aux.getIzq()==null){
if(padre.getIzq()==aux){
padre.setIzq(null);
}else
padre.setDer(null);
return aux;
}
//Caso Hijo.
if((aux.getIzq() != null && aux.getDer() == null)
|| (aux.getIzq() == null && aux.getDer() != null))
{
if(padre == aux){//Caso Raíz.
if(aux.getIzq() != null){
raiz = aux.getIzq();
}
else{
raiz = aux.getDer();
}
}
else{
if(aux.getIzq() == null){
if(aux.getNo_control().compareTo(padre.getNo_control())<0){
padre.setIzq(aux.getDer());
}
else{
padre.setDer(aux.getDer());
}
}
else{
if(aux.getNo_control().compareTo(padre.getNo_control())<0){
padre.setIzq(aux.getIzq());
}
else{
padre.setDer(aux.getIzq());
}
}
}
}//Cierra caso de un hijo.
/caso 2 hijos
if(aux.getDer()!=null && aux.getIzq()!=null){
NodoA aux2=aux;//Guarda la referencia del nodo a eliminar.
aux=aux2.getDer();
NodoA padre2=aux;
if(aux2==getRaiz()){
if(aux.getIzq()==null){
aux.setIzq(raiz.getIzq());
raiz=aux;
}else{
do{
padre2=aux;
aux=aux.getIzq();
}while(aux.getIzq()!=null);
if(aux.getDer()!=null){
padre2.setIzq(aux.getDer());
aux.setIzq(aux2.getIzq());
aux.setDer(aux2.getDer());
raiz=aux;
}else{
padre2.setIzq(null);
aux.setIzq(aux2.getIzq());
aux.setDer(aux2.getDer());
raiz=aux;
}
}
}else{ //termina caso base
//caso nodo mayor al ´padre
if(aux2.getDescripcion().compareTo(padre.getDescripcion())>0){
if(aux.getIzq()==null){
aux.setIzq(aux2.getIzq());
padre.setDer(aux);
}else{
do{
padre2=aux;
aux=aux.getIzq();
}while(aux.getIzq()!=null);
if(aux.getDer()!=null){
padre2.setIzq(aux.getDer());
aux.setIzq(aux2.getIzq());
aux.setDer(aux2.getIzq());
padre.setDer(aux);
}else{
padre2.setIzq(null);
aux.setIzq(aux2.getIzq());
aux.setDer(aux2.getDer());
padre.setDer(aux);
}
}
}//termina caso nodo mayor al padre
//inicia caso nodo menor a padre
else{
if(aux.getIzq()==null){
aux.setIzq(aux2.getIzq());
padre.setIzq(aux);
}else{
do{
padre2=aux;
aux=aux.getIzq();
}while(aux.getDer()!=null);
if(aux.getDer()!=null){
padre2.setIzq(aux2.getDer());
aux.setIzq(aux2.getIzq());
aux.setDer(aux2.getDer());
padre.setIzq(aux);
}else{
padre2.setIzq(null);
aux.setIzq(aux2.getIzq());
aux.setDer(aux2.getDer());
padre.setIzq(aux);
}
}
}
}return aux2;
}//Termina caso de dos hijos.
return aux;
}
public void inorden(NodoA in){
if(in!=null){
inorden(in.getIzq());
JOptionPane.showMessageDialog(null,"ARTICULO"+in.getDescripcion()+"\n"+
"CANTIDAD"+in.getCantidad());
inorden(in.getDer());
}
}
public void preorden(NodoA pre){
if(pre!=null){
JOptionPane.showMessageDialog(null,"ARTICULO"+pre.getDescripcion()+"\n"+
"CANTIDAD"+pre.getCantidad());
preorden(pre.getIzq());
preorden(pre.getDer());
}
}
public void posorden(NodoA pos){
if(pos!=null){
posorden(pos.getIzq());
posorden(pos.getDer());
JOptionPane.showMessageDialog(null,"ARTICULO"+pos.getDescripcion()+"\n"+
"CANTIDAD"+pos.getCantidad());
}
}
double s = 0;
public void suma_costos(String cat,NodoA suma){
if(suma!=null){
suma_costos(cat,suma.getIzq());
suma_costos(cat,suma.getDer());
if(cat.compareTo(suma.getCategoria())==0){
s=s+suma.getCosto();
JOptionPane.showMessageDialog(null,"CATEGORIA: "+suma.getCategoria()+"\n"+
"COSTO: "+ s , "COSTOS" , JOptionPane.INFORMATION_MESSAGE);
}
}
}
public void pos_cat(String cat,NodoA pos){
if(pos!=null){
pos_cat(cat,pos.getIzq());
pos_cat(cat,pos.getDer());
if(cat.compareTo(pos.getCategoria())==0){
JOptionPane.showMessageDialog(null,"ARTICULO: "+pos.getDescripcion()+"\n"+
"CANTIDAD: "+pos.getCantidad() , cat , JOptionPane.INFORMATION_MESSAGE);
}
}
}
No hay comentarios.:
Publicar un comentario