Vous êtes sur la page 1sur 10

lOMoARcPSD|3781505

Aboles NArios - Código fuente para la implementación de un


árbol N-Ario en Netbeans.
Estructuras de Datos (Universidad de Caldas)

StuDocu no está patrocinado ni avalado por ningún colegio o universidad.


Descargado por santa maria de los niños (smariadelosninos@gmail.com)
lOMoARcPSD|3781505

// Creación de los Nodos


package arbolesnarios;

import java.util.ArrayList;
import java.util.List;

public class Nodo<T> {


private T dato;
private List<Nodo<T>> hijos;
private Nodo<T> padre;

public Nodo(T dato) {


this.dato = dato;
this.hijos = new ArrayList<>();
}

public Nodo(Nodo<T> nodo) {


this.dato = (T) nodo.getDato();
hijos = new ArrayList<>();
}

public void agregarHijo(Nodo<T> hijo) {


hijo.setPadre(this);
hijos.add(hijo);
}

public void agregarHijoEn(int posicion, Nodo<T> hijo) {


hijo.setPadre(this);
this.hijos.add(posicion, hijo);

Descargado por santa maria de los niños (smariadelosninos@gmail.com)


lOMoARcPSD|3781505

public void setHijos(List<Nodo<T>> hijos) {


for (Nodo<T> hijo : hijos)
hijo.setPadre(this);

this.hijos = hijos;
}

public void eliminarHijos() {


this.hijos.clear();
}

public Nodo<T> eliminarHijoEn(int posicion) {


return hijos.remove(posicion);
}

public void eliminarHijo(Nodo<T> hijoABorrar)


{
List <Nodo<T>> list = getHijos();
list.remove(hijoABorrar);
}

public T getDato() {
return this.dato;
}

public void setDato(T dato) {


this.dato = dato;

Descargado por santa maria de los niños (smariadelosninos@gmail.com)


lOMoARcPSD|3781505

public Nodo<T> getPadre() {


return this.padre;
}

public void setPadre(Nodo<T> padre) {


this.padre = padre;
}

public List<Nodo<T>> getHijos() {


return this.hijos;
}

public Nodo<T> getHijoEn(int posicion) {


return hijos.get(posicion);
}

@Override
public boolean equals(Object obj) {
if (null == obj)
return false;

if (obj instanceof Nodo) {


if (((Nodo<?>) obj).getDato().equals(this.dato))
return true;
}

return false;
}

Descargado por santa maria de los niños (smariadelosninos@gmail.com)


lOMoARcPSD|3781505

@Override
public String toString() {
return this.dato.toString();
}

// Creación del ArbolNArio

package arbolesnarios;

import java.util.ArrayList;

public class ArbolNArio<T> {

private Nodo<T> raiz;

public ArbolNArio(Nodo<T> raiz) {


this.raiz = raiz;
}

public boolean vacio() {


return raiz == null;
}

public Nodo<T> getRaiz() {


return raiz;
}

Descargado por santa maria de los niños (smariadelosninos@gmail.com)


lOMoARcPSD|3781505

public void setRaiz(Nodo<T> raiz) {


this.raiz = raiz;
}

public boolean existe(T clave) {


return encontrar(raiz, clave);
}

public int getNumeroNodos() {


return getNumeroDescendientes(raiz) + 1;
}

public int getNumeroDescendientes(Nodo<T> nodo) {


int n = nodo.getHijos().size();
for (Nodo<T> hijo : nodo.getHijos())
n += getNumeroDescendientes(hijo);

return n;

private boolean encontrar(Nodo<T> nodo, T nodoClave) {


boolean res = false;
if (nodo.getDato().equals(nodoClave))
return true;

Descargado por santa maria de los niños (smariadelosninos@gmail.com)


lOMoARcPSD|3781505

else {
for (Nodo<T> hijo : nodo.getHijos())
if (encontrar(hijo, nodoClave))
res = true;
}

return res;
}

private Nodo<T> encontrarNodo(Nodo<T> nodo, T nodoClave)


{
if(nodo == null)
return null;
if(nodo.getDato().equals(nodoClave))
return nodo;
else
{
Nodo<T> cnodo = null;
for (Nodo<T> hijo : nodo.getHijos())
if ((cnodo = encontrarNodo(hijo, nodoClave)) != null)
return cnodo;
}
return null;
}

public ArrayList<Nodo<T>> getPreOrder() {


ArrayList<Nodo<T>> preOrder = new ArrayList<Nodo<T>>();
construirPreOrder(raiz, preOrder);
return preOrder;
}

Descargado por santa maria de los niños (smariadelosninos@gmail.com)


lOMoARcPSD|3781505

public ArrayList<Nodo<T>> getPostOrder() {


ArrayList<Nodo<T>> postOrder = new ArrayList<Nodo<T>>();
construirPostOrder(raiz, postOrder);
return postOrder;
}

private void construirPreOrder(Nodo<T> nodo, ArrayList<Nodo<T>> preOrder) {


preOrder.add(nodo);
for (Nodo<T> hijo : nodo.getHijos()) {
construirPreOrder(hijo, preOrder);
}
}

private void construirPostOrder(Nodo<T> nodo, ArrayList<Nodo<T>> postOrder) {


for (Nodo<T> hijo : nodo.getHijos()) {
construirPostOrder(hijo, postOrder);
}
postOrder.add(nodo);
}

public ArrayList<Nodo<T>> caminoMasLargo() {


ArrayList<Nodo<T>> camino = null;
int max = 0;
for (ArrayList<Nodo<T>> ruta : getRamas()) {
if (ruta.size() > max) {
max = ruta.size();
camino = ruta;
}
}

Descargado por santa maria de los niños (smariadelosninos@gmail.com)


lOMoARcPSD|3781505

return camino;
}

public int getCaminoMasLargo()


{
return caminoMasLargo().size();
}

public ArrayList<ArrayList<Nodo<T>>> getRamas() {


ArrayList<ArrayList<Nodo<T>>> rutas = new
ArrayList<ArrayList<Nodo<T>>>();
ArrayList<Nodo<T>> camino = new ArrayList<Nodo<T>>();
getPath(raiz, camino, rutas);

return rutas;
}

private void getPath(Nodo<T> nodo, ArrayList<Nodo<T>> camino,


ArrayList<ArrayList<Nodo<T>>> rutas) {
if (camino == null)
return;

camino.add(nodo);

if (nodo.getHijos().size() == 0) {
rutas.add(clone(camino));
}
for (Nodo<T> hijo : nodo.getHijos())
getPath(hijo, camino, rutas);

Descargado por santa maria de los niños (smariadelosninos@gmail.com)


lOMoARcPSD|3781505

int index = camino.indexOf(nodo);


for (int i = index; i < camino.size(); i++)
camino.remove(index);
}

private ArrayList<Nodo<T>> clone(ArrayList<Nodo<T>> list) {


ArrayList<Nodo<T>> lista = new ArrayList<Nodo<T>>();
for (Nodo<T> nodo : list)
lista.add(new Nodo<T>(nodo));

return lista;
}
}

//Creación AbolesNArios
package arbolesnarios;

public class ArbolesNArios {

public static void main(String[] args) {


// TODO code application logic here
}

Descargado por santa maria de los niños (smariadelosninos@gmail.com)

Vous aimerez peut-être aussi