Skip to content

Commit

Permalink
Arbol binario v1.5.0
Browse files Browse the repository at this point in the history
  • Loading branch information
DiscoDurodeRoer committed Jun 23, 2018
1 parent f6729a1 commit 2615456
Show file tree
Hide file tree
Showing 2 changed files with 126 additions and 12 deletions.
120 changes: 119 additions & 1 deletion Arboles/src/arboles/binario/BinarySearchTree.java
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
/**
* Arbol binario de busqueda o BST
*
* @author DiscoDurodeRoer
* @author DDR
* @param <T>
*/
public class BinarySearchTree<T extends Comparable<T>> {
Expand Down Expand Up @@ -59,4 +59,122 @@ public boolean isInternal(NodoArbolBinario<T> nodo) {
return !isLeaf(nodo);
}

/**
* Añade un nodo de forma recursiva
*
* @param origen
* @param elemento
* @return nodo añadido
*/
public NodoArbolBinario<T> add(NodoArbolBinario<T> origen, T elemento) {

NodoArbolBinario<T> nodo = null;
//Si el root es nulo, lo añade el primero
if (root == null) {
nodo = new NodoArbolBinario<>(elemento);
root = nodo;
} else if (origen == null) { //el parametro pasado es invalido
System.out.println("El origen es nulo");
} else {

//Comparamos los elementos
//Si el nodo del origen es mayor que el elemento pasado, pasa a la izquierda
if (origen.getElement().compareTo(elemento) > 0) {

//Si tiene nodo izquierdo, hago la llamada recursiva
if (origen.getLeft() != null) {
nodo = add(origen.getLeft(), elemento);
} else {
//Creo el nodo
nodo = new NodoArbolBinario<>(elemento);
//Indico que el padre del nodo creado
nodo.setParent(origen);
//Indico que el nodo es el nodo izquierdo del origen
origen.setLeft(nodo);
}

} else { //sino pasa a la derecha

//Si tiene nodo derecho, hago la llamada recursiva
if (origen.getRight() != null) {
nodo = add(origen.getRight(), elemento);
} else {
//Creo el nodo
nodo = new NodoArbolBinario<>(elemento);
//Indico que el padre del nodo creado
nodo.setParent(origen);
//Indico que el nodo es el nodo izquierdo del origen
origen.setRight(nodo);
}

}

}

return nodo;

}

/**
* Añade un nodo de forma iterativa
*
* @param elemento
* @return nodo añadido
*/
public NodoArbolBinario<T> add(T elemento) {

NodoArbolBinario<T> nodo = null;
//Si el root es nulo, lo añade el primero
if (root == null) {
nodo = new NodoArbolBinario<>(elemento);
root = nodo;
} else {

//Creo un nodo auxuliar
NodoArbolBinario<T> aux = root;
boolean insertado = false;
//No salgo hasta que este insertado
while (!insertado) {

//Comparamos los elementos
//Si el nodo del origen es mayor que el elemento pasado, pasa a la izquierda
if (aux.getElement().compareTo(elemento) > 0) {

//Si tiene nodo izquierdo, actualizo el aux
if (aux.getLeft() != null) {
aux = aux.getLeft();
} else {
//Creo el nodo
nodo = new NodoArbolBinario<>(elemento);
//Indico que el padre del nodo creado
nodo.setParent(aux);
aux.setLeft(nodo);
//indico que lo he insertado
insertado = true;
}

} else {

if (aux.getRight() != null) {
aux = aux.getRight();
} else {
//Creo el nodo
nodo = new NodoArbolBinario<>(elemento);
//Indico que el padre del nodo creado
nodo.setParent(aux);
aux.setRight(nodo);
//indico que lo he insertado
insertado = true;
}

}

}

}

return nodo;

}

}
18 changes: 7 additions & 11 deletions Arboles/src/arboles/binario/NodoArbolBinario.java
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
package arboles.binario;

/**
* Representa a un nodo en un arbol binario
* @author DiscoDurodeRoer
* @param <T>
*/
public class NodoArbolBinario<T> {
* Representa a un nodo en un arbol binario
* @author DiscoDurodeRoer
* @param <T>
*/
public class NodoArbolBinario<T extends Comparable<T>> {

private T element;
private NodoArbolBinario<T> parent;
private NodoArbolBinario<T> left;
Expand All @@ -33,7 +33,6 @@ public NodoArbolBinario(T element, NodoArbolBinario<T> left, NodoArbolBinario<T>
this.left = left;
this.right = right;
}


public T getElement() {
return element;
Expand Down Expand Up @@ -66,8 +65,5 @@ public NodoArbolBinario<T> getRight() {
public void setRight(NodoArbolBinario<T> right) {
this.right = right;
}





}

0 comments on commit 2615456

Please sign in to comment.