En ciencias de la computación, un árbol binario es una estructura de datos en la cual cada nodo siempre tiene un hijo izquierdo y un hijo derecho. No pueden tener más de dos hijos (de ahí el nombre "binario"). Si algún hijo tiene como referencia a null, es decir que no almacena ningún dato, entonces este es llamado un nodo externo. En el caso contrario el hijo es llamado un nodo interno. Usos comunes de los árboles binarios son los árboles binarios de búsqueda, los montículos binarios y Codificación de Huffman.
Tipos de árboles binarios
Un árbol binario es un árbol con raíz en el que cada nodo tiene como máximo dos hijos.
- Un árbol binario lleno es un árbol en el que cada nodo tiene cero o dos hijos.
- Un árbol binario perfecto es un árbol binario lleno en el que todas las hojas (vértices con cero hijos) están a la misma profundidad (distancia desde la raíz, también llamada altura).
- A veces un árbol binario perfecto es denominado árbol binario completo. Otros definen un árbol binario completo como un árbol binario lleno en el que todas las hojas están a profundidad n o n-1, para alguna n.
Programa de Árbol binario JavaSe implementara un programa que solicite una cantidad de datos a ingresar y posteriormente los ordenra como un árbol binario.
- Solicitara la cantidad de datos a ingresar
- solicitar ingresar datos numéricos hasta completar la cantidad indicada en el punto uno
- desplegara los datos ordenados en orden
- Indicara cuanto son la cantidad de nodos
- Indicara cuantos nodos son del tipo hoja
- Desplegara los datos indicando su nivel
- Desplegara la altura del árbol
- Desplegara el mayor valor del árbol
- eliminara el menor valor
Actividades implementadas
Salida del programa
run:
Ingrese el numero de Datos a capturar: 7
Ingrese Dato Solo Numerico 1:
11
Ingrese Dato Solo Numerico 2:
33
Ingrese Dato Solo Numerico 3:
55
Ingrese Dato Solo Numerico 4:
6
Ingrese Dato Solo Numerico 5:
8
Ingrese Dato Solo Numerico 6:
00
Ingrese Dato Solo Numerico 7:
1
Impresion entreorden:
0 1 6 8 11 33 55
Cantidad de nodos del árbol:7
Cantidad de nodos hoja:3
Impresion en entre orden junto al nivel del nodo.
0 (3) - 1 (4) - 6 (2) - 8 (3) - 11 (1) - 33 (2) - 55 (3) -
Artura del arbol:4
Mayor valor del árbol:55
Luego de borrar el menor:
1 6 8 11 33 55
clases
main
public class main {
public static void main (String [] ar)
{
ArbolBinarioOrdenado abo = new ArbolBinarioOrdenado ();
java.util.Scanner leer=new java.util.Scanner(System.in);
int z;
System.out.print("Ingrese el numero de Datos a capturar: ");
z=leer.nextInt();
for(int i=1; i<=z;i++){
int m;
System.out.println("Ingrese Dato Solo Numerico "+i+": ");m=leer.nextInt();
abo.insertar(m);
}
System.out.println ("Impresion entreorden: ");
abo.imprimirEntre ();
System.out.println ("Cantidad de nodos del árbol:"+abo.cantidad());
System.out.println ("Cantidad de nodos hoja:"+abo.cantidadnodosHoja());
System.out.println ("Impresion en entre orden junto al nivel del nodo.");
abo.imprimirEntreConNivel();
System.out.print ("Artura del arbol:");
System.out.println(abo.retornarAltura());
abo.mayorValorl();
abo.borrarMenor();
System.out.println("Luego de borrar el menor:");
abo.imprimirEntre ();
}
}
ArbolBinarioOrdenado
package cl.arbol;
class ArbolBinarioOrdenado {
nodo raiz;
private int cant;
private int altura;
//constructor
public ArbolBinarioOrdenado()
{
raiz=null;
}
private void imprimirPre (nodo reco)
{
if (reco != null)
{
System.out.print(reco.info + " ");
imprimirPre (reco.izq);
imprimirPre (reco.der);
}
}
public void imprimirPre ()
{
imprimirPre (raiz);
System.out.println();
}
private void imprimirEntre (nodo reco)
{
if (reco != null)
{
imprimirEntre (reco.izq);
System.out.print(reco.info + " ");
imprimirEntre (reco.der);
}
}
private void imprimirPost (nodo reco)
{
if (reco != null)
{
imprimirPost (reco.izq);
imprimirPost (reco.der);
System.out.print(reco.info + " ");
}
}
public void imprimirPost ()
{
imprimirPost (raiz);
System.out.println();
}
public void insertar (int info) {
if (!existe(info)) {
nodo nuevo;
nuevo = new nodo ();
nuevo.info = info;
nuevo.izq = null;
nuevo.der = null;
if (raiz == null)
raiz = nuevo;
else {
nodo anterior = null, reco;
reco = raiz;
while (reco != null) {
anterior = reco;
if (info < reco.info)
reco = reco.izq;
else
reco = reco.der;
}
if (info < anterior.info)
anterior.izq = nuevo;
else
anterior.der = nuevo;
}
}
}
public boolean existe(int info) {
nodo reco=raiz;
while (reco!=null) {
if (info==reco.info)
return true;
else
if (info>reco.info)
reco=reco.der;
else
reco=reco.izq;
}
return false;
}
public void imprimirEntre () {
imprimirEntre (raiz);
System.out.println();
}
private void cantidad(nodo reco) {
if (reco!=null) {
cant++;
cantidad(reco.izq);
cantidad(reco.der);
}
}
public int cantidad() {
cant = 0;
cantidad(raiz);
return cant;
}
private void cantidadnodosHoja(nodo reco) {
if (reco!=null) {
if (reco.izq==null && reco.der==null)
cant++;
cantidadnodosHoja(reco.izq);
cantidadnodosHoja(reco.der);
}
}
public int cantidadnodosHoja() {
cant=0;
cantidadnodosHoja(raiz);
return cant;
}
private void imprimirEntreConNivel (nodo reco,int nivel) {
if (reco != null) {
imprimirEntreConNivel (reco.izq,nivel+1);
System.out.print(reco.info + " ("+nivel+") - ");
imprimirEntreConNivel (reco.der,nivel+1);
}
}
public void imprimirEntreConNivel () {
imprimirEntreConNivel (raiz,1);
System.out.println();
}
private void retornarAltura (nodo reco,int nivel) {
if (reco != null) {
retornarAltura (reco.izq,nivel+1);
if (nivel>altura)
altura=nivel;
retornarAltura (reco.der,nivel+1);
}
}
public int retornarAltura () {
altura=0;
retornarAltura (raiz,1);
return altura;
}
public void mayorValorl() {
if (raiz!=null) {
nodo reco=raiz;
while (reco.der!=null)
reco=reco.der;
System.out.println("Mayor valor del árbol:"+reco.info);
}
}
public void borrarMenor() {
if (raiz!=null) {
if (raiz.izq==null)
raiz=raiz.der;
else {
nodo atras=raiz;
nodo reco=raiz.izq;
while (reco.izq!=null) {
atras=reco;
reco=reco.izq;
}
atras.izq=reco.der;
}
}
}
}
nodo
package cl.arbol;
public class nodo
{
int info;
nodo izq, der;
}
Refrencias
http://es.wikipedia.org/wiki/%C3%81rbol_binario
Juan Carlos Delgado
No hay comentarios:
Publicar un comentario