Está en la página 1de 8

TALLER 1 – ARBOLES (BINARIOS)

ESTRUCTURA DE DATOS DINAMICOS Y ALGORITMOS

JHAN CARLOS RAMIREZ NAVARRO


1004802359

RICARDO JESUS BARRERA


DOCENTE

UNIVERSIDAD DE PAMPLONA
FACULTAD DE INGENIERIAS Y ARQUITECTURA
INGENIERIA DE SISTEMAS
2019

Página 1|8
CUESTIONARIO

1) DEFINICIÓN

Los Árboles Binarios son grafos conexos, acíclicos y no dirigidos tal que el grado de
cada vértice no es mayor a 3 [1], es decir, que tenemos un grafo donde cada nodo
puede tener máximo 2 hijos (o hijas) y estas hojas pueden tener máximo 2 hijos a
cualquier otra hoja anterior.
Los Árboles en programación, sirven para organizar datos para facilitar su
manipulación, ya sea ingresando, borrando o búsqueda de datos, y precisamente una
de las principales ventajas de los árboles binarios es la búsqueda, ya que como en
muchos algoritmos de búsqueda necesitamos tener la información ordenada y en
nuestros arboles binarios precisamente los datos van ingresando de forma ordenada
[2].

2) PARTES DE LA ESTRUCTURA

✓ NODO INTERIOR
También llamado “Nodo Rama”. Es un nodo cualquiera que puede tener hijos,
aunque en este preciso momento no los tenga. Es todo nodo que no es raíz u
hoja. [3]
Ejemplo: Los nodos A, B y D del Árbol 1.

✓ NIVEL DE UN ARBOL
También llamado “Profundidad”. Es el número máximo de nodos de una rama
del árbol. Es igual al nivel más alto de los nodos del árbol. [3]
Ejemplo: El Árbol 1 tiene 3 niveles.

✓ GRADO DE UN NODO
Es el número de subárboles que tiene un nodo. Los nodos hoja tienen grado
cero. [3]
Ejemplo: Del Árbol 1, el nodo A tiene grado 3 y los nodos B y D tienen grado
2.
Página 2|8
✓ LONGITUD DEL RECORRIDO DE UN NODO
También llamado “Nivel del Nodo”. Es la longitud del camino desde el nodo
raíz al nodo específico más uno. La raíz tiene longitud de camino 1, sus
descendientes directos tienen longitud de camino 2, etc. En forma general, un
nodo en el nivel i tiene longitud de camino i. [3]

3) CLASES O TIPOS DE ARBOLES BINARIOS

✓ BINARIO PERFECTAMENTE EQUILIBRADO

La eficiencia de las operaciones


depende exclusivamente de la
altura del árbol. Para un árbol de
N nodos perfectamente
equilibrado el coste de acceso es
de origen logarítmico o “Log
N”. En un árbol binario
perfectamente equilibrado, el
número de nodos en el subárbol izquierdo y el número de nodos en el subárbol
derecho, difieren como mucho en una unidad, y los subárboles son también
equilibrados. [4]

✓ BINARIO COMPLETO

Árbol lleno hasta el penúltimo


nivel (n-1). En el último nivel los
nodos están agrupados a la
izquierda. Estos pueden
almacenar cualquier número de
nodos y se sigue cumpliendo que
su altura es proporcional al
logaritmo del número de nodos: h ∈ O (log n). [5]

✓ BINARIO ORDENADO

Es un árbol en el que los


subárboles de cada nodo
forman un conjunto ordenado.
En estos árboles podemos
hablar del primero, segundo o
último hijo de un nodo
particular. El primer hijo de un
Página 3|8
nodo, en un árbol ordenado, se denomina con frecuencia el hijo más viejo de
este nodo y el último hijo, se denomina el hijo más joven. [3]

4) LIBRE

✓ USOS
Algunos ejemplos donde la estructura de datos “Árbol” puede ser muy útil
1. Los Sistemas de archivos (File System) de los sistemas operativos.
Compuestos por jerarquías de directorios y archivos.
2. La jerarquía de clases en los lenguajes orientados a objetos.
3. La jerarquía de países, provincias, departamentos y municipios que
organiza al poder político de una república. [3]

✓ NECESIDADES
1. Encontrar un nodo de un árbol, cuando se ignora si existe o no el árbol.
2. Recuperar todos los nodos de un árbol. [3]

✓ EJEMPLO: CREACIÓN DE UN ARBOL


1. Creación del Árbol

public class Node {


private Integer value;
private Node left;
private Node right;

public Node (Integer value) {


this.value = value;
}
//... Getters y setters
}

2. Agregar un valor nuevo

public class Node {


...// El código anterior
public void add (Integer value) {
if (value < this.value) {
if (left != null) {
left.add(value);
} else {
left = new Node(value);
}
} else {
Página 4|8
if (right != null) {
right.add(value);
} else {
right = new Node(value);
}
}
}
}

3. Buscar un valor

import java.util.Optional;
public class Node {
...// El código anterior
public Optional<Node> find(Integer value) {
if (value == this.value) {
return Optional.of(this);
} else if (value < this.value) {
if (this.left != null) {
return this.left.find(value);
} else {
return Optional.empty();
}
} else {
if (this.right != null) {
return this.right.find(value);
} else {
return Optional.empty();
}
}
}
}

4. Imprimir los valores del Árbol Binario

public class Node{


...// El código anterior
public void printInOrder(){
if(left!=null){
left.printInOrder();
}
System.out.println(value);
if(right!=null){
Página 5|8
right.printInOrder();
}
}

public void printPreOrder(){


System.out.println(value);
if(left!=null){
left.printPreOrder();
}
if(right!=null){
right.printPreOrder();
}
}

public void printPosOrder(){


if(left!=null){
left.printPreOrder();
}
if(right!=null){
right.printPreOrder();
}
System.out.println(value);
}
}

5. Ejemplo
import java.util.Optional;

/**
* @author JhanRamirez
*
*/
public class Ejemplo {
public static void main(String[] args) {
Node root = new Node(10);
root.add(5);
root.add(15);
root.add(8);

Optional<Node> result = root.find(11);


if (result.isPresent()) {
System.out.println(result.get());
} else {
Página 6|8
System.out.println("Value not found");
}

result = root.find(8);
if (result.isPresent()) {
System.out.println(result.get());
} else {
System.out.println("Value not found");
}
System.out.println("Imprimir en orden");
root.printInOrder();
System.out.println("Imprimir pos orden");
root.printPosOrder();
System.out.println("Imprimir pre orden");
root.printPreOrder();
}
}

6. Resultados por pantalla:

Value not found


Node [value=8, left=null, right=null]
Imprimir en orden
5
8
10
15
Imprimir pos orden
5
8
15
10
Imprimir pre orden
10
5
8
15

Página 7|8
WEBGRAFIA

[1]: https://serprogramador.es/programar-arboles-binarios-parte-1-
introduccionclasesagregar-nodo/

[2]: https://uniwebsidad.com/libros/javascript/capitulo-5/arbol-de-nodos

[3]: https://www.fceia.unr.edu.ar/estruc/2005/arbofund.htm

[4]:
https://es.wikibooks.org/wiki/Estructuras_de_datos_dinCA1micas/%C3%81rboles

[5]: https://estructurasite.wordpress.com/arbol-b/

Página 8|8

También podría gustarte