Árboles binarios funciones c++
Enviado por Ramiro Guerra • 24 de Agosto de 2023 • Trabajo • 2.941 Palabras (12 Páginas) • 45 Visitas
[pic 1] [pic 2]
Estructura de datos
Practica 7. Arboles binarios.
Julio Esteban Valdez López
Ramiro Amador Guerra
Código: 219600564
Ciclo 2023 A Carrera: INNI
Introducción.
Los arboles binarios, son una nueva estructura de dato su característica principal es que cada nodo puede tener como máximo dos hijos, uno llamado hijo izquierdo y otro llamado hijo derecho. Cada nodo en un árbol binario puede tener cero, uno o dos hijos. Estos hijos se ven clasificados normalmente por alguna característica, esto para conocer de qué lado se ira el dato insertado.
Los arboles normalmente, son utilizados para almacenar y organizar datos de manera jerárquica, donde cada nodo puede tener varios subnodos, y cada subnodo puede tener sus propios subnodos y viceversa. Los árboles binarios son útiles en programación porque son eficientes a la hora de realizar búsquedas y operaciones de inserción, y también en la eliminación de datos.
Capturas de pantalla.
Este árbol fue sobrecargado con los datos para que quedara de esta forma:
[pic 3]
Permitiéndonos facilitarnos la muestra de los métodos.
[pic 4]
El primer método vacía, nos indica si el árbol cuenta con datos o se encuentra sin datos que almacenar.
[pic 5]
A lo que hacemos uso de nuestro método Anula, que nos permite borrar en orden los nodos.
[pic 6]Volvemos a hacer uso del método vacío para comprobar que se encuentra vacio nuestro árbol.
[pic 7]
[pic 8]
Lo que hicimos en estas dos capturas es primero, insertar el dato 50, para comprobar la funcionalidad de inserta y después comprobamos la funcionalidad de recorrer preorder.
[pic 9]
En esta captura primero eliminamos el 14 y después el 13, por lo que el árbol quedo, como se muestra con la función preorder.
[pic 10]
Aquí tenemos el recorrido inoder, realiza el recorrido inorder en el subárbol izquierdo, luego imprime el valor del nodo actual y finalmente realiza el recorrido inorder en el subárbol derecho.
De manera que el árbol se muestra en orden, no pude lograr que se vea como un árbol.
[pic 11]
Aquí tenemos el resultado de la función 6. Recorre postorder, esta función hace el recorrido postorder en el subárbol izquierdo, luego en el subárbol derecho y finalmente imprime el valor del nodo actual.
De manera que al final se muestra la raíz principal, una forma interesante de ver el árbol, no pude lograr que se viera como un árbol.
[pic 12]Por ultimo tenemos esta captura de pantalla que muestra el funcionamiento de la función que nos hacía falta, la función buscar nos pide como parámetro un dato, si este no se encuentra en el árbol, nos muestra un mensaje por pantalla explicándolo y si se encuentra nos muestra la posición en memoria.
Código fuente.
/******************************************************************************
Codigo de ejemplo para arboles binarios.
*******************************************************************************/
#include <iostream>
#define TIPO_DATO int
using namespace std;
class Nodo{
friend class Arbol;
private:
TIPO_DATO elem;
Nodo * hijo_izq;
Nodo * hijo_der;
public:
~Nodo(){};
Nodo(TIPO_DATO elem);
void insertar(TIPO_DATO dato);
void rec_preorden(int );
Nodo* deletePos(int&,Nodo *);
Nodo* searchValue(int value,Nodo *);
void anularNodos(Nodo*&);
void rec_inorder(Nodo* nodo,int nivel);
void rec_postorder(Nodo* nodo,int nivel);
};
Nodo* Nodo::deletePos(int& posicion, Nodo* nodo) {
if (nodo == nullptr) {
return nullptr;
}
nodo->hijo_izq = deletePos(posicion, nodo->hijo_izq);
if (posicion == 1) {
Nodo* temp = nodo->hijo_der;
delete nodo;
return temp;
}
posicion--;
nodo->hijo_der = deletePos(posicion, nodo->hijo_der);
return nodo;
}
Nodo::Nodo(TIPO_DATO elem)
{
this->elem = elem;
hijo_der = nullptr;
hijo_izq = nullptr;
}
void Nodo::insertar(TIPO_DATO dato)
{
if( dato < elem){
if(hijo_izq == nullptr){
hijo_izq = new Nodo(dato);
} else {
hijo_izq->insertar(dato);
}
} else {
if(hijo_der == nullptr){
hijo_der = new Nodo(dato);
} else {
hijo_der->insertar(dato);
}
}
}
void Nodo::rec_preorden(int nivel)
{
for (int i = 0 ; i < nivel ; i++) {
std::cout << " ";
...