Está en la página 1de 15

Arboles Binarios

• Programacion Orientada A Objetos.


• Gerardo Contreras Gomez
• Oscar Daniel Lopez Perez
¿Qué es un árbol?
• Un árbol es una estructura
no lineal formada por un
conjunto de nodos y un
conjunto de ramas.
• En un árbol existe un nodo
especial denominado raíz.
Así mismo, un nodo del
que sale alguna rama,
recibe el nombre de nodo
de bifurcación o nodo
rama y un nodo que no
tiene ramas recibe el
nombre de nodo hoja. A
continuación se aprecia en
la siguiente figura:
• Datos importantes de los Árboles
• Para comprender mejor que es un
árbol comenzaremos explicando
cómo está estructurado.
• Nodos: Se le llama Nodo a cada
elemento que contiene un Árbol.
• Nodo Raíz: Se refiere al primer
nodo de un Árbol, Solo un nodo del
Árbol puede ser la Raíz.
• Nodo Padre: Se utiliza este término
para llamar a todos aquellos nodos
que tiene al menos un hijo.
• Nodo Hijo: Los hijos son todos
aquellos nodos que tiene un padre.
• Nodo Hermano: Los nodos
hermanos son aquellos nodos que
comparte a un mismo padre en
común dentro de la estructura.
• Nodo Hoja: Son todos aquellos
nodos que no tienen hijos, los
cuales siempre se encuentran en
los extremos de la estructura.
• Nodo Rama: Estos son todos
aquellos nodos que no son la raíz y
que además tiene al menos un hijo.
• Un árbol binario es un conjunto finito de nodos que consta de un nodo
raíz que tiene dos subárboles binarios denominados subárbol
izquierdo y subárbol derecho.
• El árbol binario es una estructura de datos muy útil cuando el tamaño
de la estructura no se conoce, se necesita acceder a sus elementos
ordenadamente.

¿Qué es un • En sí un árbol binario es una colección de objetos, cada uno de los


cuales contiene datos o una referencia a su subárbol derecho.

árbol • Básicamente se pueden utilizar tres formas para recorrer un árbol


binario, preorden, inorden, postorden.

binario?
¿Como se lee este árbol binario?
En preorden , inorden y postorden
¿Cómo se lee un
árbol binario?
• Preorden: R,I,D
• Inorden: I,R,D
• Postorden: I,D,R
• En el orden preorden se recorre de
la siguiente manera: raíz, subárbol
izquierdo, subárbol derecho.
• En el orden inorden se recorre de la
siguiente manera: subárbol izquierdo,
raíz, subárbol derecho.
• En el orden postorden se recorre de
la siguiente manera: subárbol
izquierdo, subárbol derecho, raíz.
• La definición de la clase árbol binario,
analizando lo expuesto anteriormente
de una variable que simboliza la raíz
del árbol y cada nodo del árbol será
un objeto de la clase
Tipos de arboles binarios:
• CLASIFICACIÓN DE ÁRBOLES BINARIOS
• Existen cuatro tipos de árbol
binario:.
• A. B. Distinto.
• A. B. Similares.
• A. B. Equivalentes.
• A. B. Completos.
• A. B. DISTINTO
• Se dice que dos árboles binarios son
distintos cuando sus estructuras son diferentes.
Ejemplo:

A. B.
Distinto:
• Dos arboles binarios son similares cuando
sus estructuras son idénticas, pero la
información
que contienen sus nodos es diferente.
Ejemplo:
A. B.
Similares:
• Son aquellos arboles que son similares y
que además los nodos contienen la misma
información. Ejemplo:

A. B.
Equivalentes
:
A. B.
Completos:
• Son aquellos arboles
en los que todos sus
nodos excepto los
del ultimo nivel, tiene
dos hijos; el subarbol
izquierdo y el
subarbol derecho.
¿Para que sirven?
• Búsquedas eficientes: Los árboles binarios de búsqueda (BST, por sus siglas en inglés) permiten realizar búsquedas eficientes de datos. El hecho de que los datos
estén organizados de manera ordenada en un BST hace que las búsquedas sean más rápidas que en una lista no ordenada.
• Ordenamiento: Los árboles binarios pueden usarse para ordenar una colección de datos. Al recorrer el árbol en un orden específico, como in-order, se pueden
obtener los datos ordenados.
• Recorridos: Los árboles binarios permiten realizar recorridos en diferentes órdenes, como preorden, in-order y postorden, lo que es útil para procesar datos de
diversas maneras.
• Eliminación eficiente: Los árboles binarios de búsqueda facilitan la eliminación eficiente de elementos, manteniendo la estructura del árbol balanceada.
• Implementación de diccionarios: Los árboles binarios pueden utilizarse para implementar diccionarios o tablas de símbolos, donde se asocian claves con valores.
• Árboles AVL y árboles rojo-negro: Estas son variantes de árboles binarios de búsqueda que están diseñadas para mantenerse balanceadas, lo que garantiza un
rendimiento eficiente en operaciones de búsqueda, inserción y eliminación.
• Compresión de datos: Los árboles binarios se utilizan en técnicas de compresión de datos, como el árbol de Huffman, para comprimir información y reducir el
espacio de almacenamiento.
• Árboles de expresión: Los árboles binarios se usan para representar expresiones matemáticas y lógicas, lo que facilita su evaluación.
• Árboles de análisis sintáctico: En compiladores y analizadores sintácticos, los árboles binarios se utilizan para representar la estructura de un programa fuente, lo
que facilita la compilación y el análisis del código.
• Árboles de búsqueda de texto: Se utilizan para buscar patrones en texto, lo que es útil en aplicaciones de búsqueda y procesamiento de lenguaje natural.
Ejemplo

#include <iostream> if (valor < raiz->dato) {


raiz->izquierdo = insertar(raiz->izquierdo, valor);
// Definición de la estructura de un nodo en el árbol binario } else if (valor > raiz->dato) {
struct Nodo { raiz->derecho = insertar(raiz->derecho, valor);
int dato; }
Nodo* izquierdo;
Nodo* derecho; return raiz;
}
Nodo(int valor) : dato(valor), izquierdo(nullptr), derecho(nullptr) // Función para recorrer el árbol en orden (in-order)
{}
void inOrder(Nodo* raiz) {
};
if (raiz != nullptr) {
inOrder(raiz->izquierdo);
// Función para insertar un nuevo nodo en el árbol
std::cout << raiz->dato << " ";
Nodo* insertar(Nodo* raiz, int valor) {
inOrder(raiz->derecho);
if (raiz == nullptr) {
return new Nodo(valor); }
} }
Ejemplo

int main() {
Nodo* raiz = nullptr;
raiz = insertar(raiz, 10);
raiz = insertar(raiz, 5);
raiz = insertar(raiz, 15);
raiz = insertar(raiz, 3);
raiz = insertar(raiz, 7);

std::cout << "Recorrido in-order del árbol: ";


inOrder(raiz);
std::cout << std::endl;

return 0;
}

También podría gustarte