Los árboles binarios es un tipo de dato abstracto dinámico, dinámico porque puede cambiar durante la ejecución del programa, posee un numero finito de nodos, estos nodos un dato que puede ser un objeto de cualquier tipo o un simple además poseer punteros o referencias que conectan con sus nodos hijos. El primer nodo de un árbol se conoce como raíz este es único, solo existe un nodo raíz, todo nodo que no sea raíz y además posee un hijo se le llama nodo rama, el hermano de un nodo es el nodo que está al lado y comparten padre.

Puedes aprender más sobre árboles en el artículo "Estructuras de datos - Árboles"

Nodo:

Árbol Binario:

El grado de un nodo es la cantidad de hijos que este posee, y el grado de un árbol es el mayor grado de cualquiera de sus nodos, en caso de esta estructura al ser un árbol binario el máximo grado que puede tener es 2. El peso de un árbol es la suma de todos los del árbol, el peso de un árbol es importante porque nos da una referencia de la complejidad espacial.

El primer paso para desarrollar un árbol binario es crear la clase donde estará nuestra información:


public class Info {
    private int id;
    public Info(int id) {
        this.id = id;
    }

    public Info() {
        this.id=0;
    }

    /**
     * @return the id
     */
    public int getId() {
        return id;
    }

    /**
     * @param id the id to set
     */
    public void setId(int id) {
        this.id = id;
    }
}

Luego se procede a crear la clase Nodo esta tendrá un método insertar de tipo void que va servir para guardar la información en el árbol:

       
public class Nodo {
    private Nodo li;//lado izquierdo
    private Nodo ld;//lado derecho
    private Info info;
    /**
    *
    * @param info
    *
    * funcion para crear el arbol
    */
    public Nodo(Info info) {
        this.li = null;
        this.ld = null;
        this.info = info;
    }
    /** 
    *@param d
    *synchronized permite establecer un orden en la inserción o elimimación
    *y que el arbol
    *tenga sus nodos en sus lugares correspondientes. La sincronización
    *puede darse en la declaracion de los métodos o de las sentencias.
    *"apila procesos que luego se llevaran a cabo"
    */
    public synchronized void insertar(Info d){
        if (d.getId() < info.getId())
        {// si d es menor que dato si insertará a la izquierda            
            if (li == null) // en caso de que el nodo esté vacio
            {
                li = new Nodo(d);  // se crea uno nuevo
            } else {

                li.insertar(d);// en caso de que ya hubiera uno insertado a 
             //la izquierda pero el nuevo es menor se corre al siguiente nodo			
            }
        }

        if (d .getId()> info.getId()) 
        {// si d es mayor que dato si insertará a laerecha
            if (ld == null) // en caso de que el nodo esté vacio
            { 
                ld = new Nodo(d); // se crea uno nuevo
            } else {
                ld.insertar(d); // en caso de que ya hubiera uno insertado a 				//la derecha pero el nuevo es mayor se corre al siguiente nodo
            }
        }
    }
    /**
     * @return the li
     */
    public Nodo getLi() {
        return li;
    }

    /**
     * @param li the li to set
     */
    public void setLi(Nodo li) {
        this.li = li;
    }

    /**
     * @return the ld
     */
    public Nodo getLd() {
        return ld;
    }

    /**
     * @param ld the ld to set
     */
    public void setLd(Nodo ld) {
        this.ld = ld;
    }

    /**
     * @return the info
     */
    public Info getInfo() {
        return info;
    }

    /**
     * @param info the info to set
     */
    public void setInfo(Info info) {
        this.info = info;
    }
}

Por ultimo se crea la clase Arbol que va a contener las operaciones sobre los nodos:

public class Arbol {
    private Nodo nodoArbol;
    /**
    *synchronized
    *apila procesos que luego se llevaran a cabo
    */
    public synchronized void insertarNodo(Info d) {
        if (nodoArbol == null) // si el arbol esta vacio, entonces, se 
        { //inserta como raiz
        	nodoArbol = new Nodo(d);
            //System.out.println("\nInsertado en la Raiz...");
        } else {
        	nodoArbol.insertar(d);
        } 
    }
}

Conclusión: En este articulo quise hablar sobre los arboles binarios, que son, cómo funcionan, para que sirven, se desarrollo sus clases bases y los métodos básicos como lo son la inserción y la creación de los nodos y el árbol. En un futuro espero subir cerca Un Nuevo ARTICULO Con La Explicación de los Métodos de mas del árbol de Como buscar, los Recorridos, caminos, el el Obtener el Nivel del