//elimina todas las apariciones de dato y sus ramas if(!esVacio()){ if (raiz().equals(dato)){ raiz=null; hijos=new Lista<arbolGeneral<Elemento>>(); } else{ Lista<arbolGeneral<Elemento>> hijos=hijos(); while(hijosOb().posicion(dato)>0) hijos.eliminaN(hijosOb().posicion(dato)); while(!hijos.esVacia()){ hijos.primero().eliminar(dato); hijos=hijos.resto(); } } } }
public arbolGeneral<Elemento> padre(Elemento ob){
arbolGeneral<Elemento> aux=new arbolGeneral<Elemento>(); if (!esVacio()){ if (hijosOb().pertenece(ob)) aux=this; else{ Lista<arbolGeneral<Elemento>> hijos=hijos(); for (int n=1;n<=hijos.longitud() && aux.esVacio();n++) aux=hijos.elementoN(n).padre(ob); } } return aux; }
int i=0; if (!esVacio()){ Lista<arbolGeneral<Elemento>> hijos=hijos(); for (int n=1;n<=hijos.longitud();n++) i=Math.max(i,1+hijos.elementoN(n).altura()); } return i; } public int profundidad(Elemento a){ //devuelve la profundidad de a con respecto a this. Es el nivel int prof=-1; if (!esVacio()){ if (raiz().equals(a)) prof=0; else { Lista<arbolGeneral<Elemento>> hijos=hijos(); while(prof<0 && !hijos.esVacia()){ prof=hijos.primero().profundidad(a); if (prof!=-1) prof++; hijos=hijos.resto(); } } } return prof; }
public int profundidad(arbolGeneral<Elemento> a){
int prof=-1; if (!esVacio()){ if (this.equals(a)) prof=0; else { Lista<arbolGeneral<Elemento>> hijos=hijos(); while(prof<0 && !hijos.esVacia()){ prof=hijos.primero().profundidad(a); if (prof!=-1) prof++; hijos=hijos.resto(); } } } return prof; } public boolean esHoja(){ return !esVacio() && hijos().esVacia(); }
@Override public boolean equals(Object a){
boolean iguales=false; if (!iguales && a instanceof arbolGeneral){ arbolGeneral<Elemento> ag=(arbolGeneral<Elemento>)a; if((esVacio() && ag.esVacio())||this==ag) iguales=true; else//no hace falta controlar que uno es vacio y el otro no if(!esVacio() && !ag.esVacio()) iguales=raiz().equals(ag.raiz()) && hijos().equals(ag.hijos()); } return iguales; }