Tarea – Davinia Nuñez
#include <iostream>
#include <string>
typedef int Tipoelemento;
class Nodo {
public:
Tipoelemento dato;
Nodo* izdo;
Nodo* dcho;
Nodo(Tipoelemento valor) : dato(valor), izdo(nullptr), dcho(nullptr) {}
};
class ArbolBinarioBusqueda {
private:
Nodo* raiz;
public:
ArbolBinarioBusqueda() : raiz(nullptr) {}
void insertar(Tipoelemento valor) {
raiz = insertarRec(raiz, valor);
void eliminar(Tipoelemento valor) {
raiz = eliminarRec(raiz, valor);
}
void inorden() {
inordenRec(raiz);
std::cout << std::endl;
bool esVacio() { return raiz == nullptr; }
Nodo* obtenerRaiz() { return raiz; }
private:
Nodo* insertarRec(Nodo* nodo, Tipoelemento valor) {
if (nodo == nullptr) {
return new Nodo(valor);
if (valor < nodo->dato) {
nodo->izdo = insertarRec(nodo->izdo, valor);
} else if (valor > nodo->dato) {
nodo->dcho = insertarRec(nodo->dcho, valor);
return nodo;
Nodo* encontrarMinimo(Nodo* nodo) {
while (nodo->izdo) {
nodo = nodo->izdo;
return nodo;
}
Nodo* eliminarRec(Nodo* nodo, Tipoelemento valor) {
if (!nodo) return nodo;
if (valor < nodo->dato) {
nodo->izdo = eliminarRec(nodo->izdo, valor);
} else if (valor > nodo->dato) {
nodo->dcho = eliminarRec(nodo->dcho, valor);
} else {
if (!nodo->izdo) {
Nodo* temp = nodo->dcho;
delete nodo;
return temp;
} else if (!nodo->dcho) {
Nodo* temp = nodo->izdo;
delete nodo;
return temp;
Nodo* temp = encontrarMinimo(nodo->dcho);
nodo->dato = temp->dato;
nodo->dcho = eliminarRec(nodo->dcho, temp->dato);
return nodo;
void inordenRec(Nodo* nodo) {
if (nodo) {
inordenRec(nodo->izdo);
std::cout << nodo->dato << " ";
inordenRec(nodo->dcho);
}
};
void menu() {
std::cout << "\n\tTRABAJANDO CON ARBOLES DE BUSQUEDA:\n\n";
std::cout << "1.- Insertar nodo en el arbol" << std::endl;
std::cout << "2.- Recorrido en inorden" << std::endl;
std::cout << "3.- Eliminar nodo" << std::endl;
std::cout << "4.- Esta vacio el arbol?" << std::endl;
std::cout << "0.- Salir" << std::endl;
std::cout << "\n INGRESE OPCION: ";
int main() {
ArbolBinarioBusqueda arbol;
int op, valor;
int valores[] = {51, 36, 159, 89, 142, 108, 25, 177, 78, 157, 3, 178, 28,
150, 179, 164, 71, 169, 113, 81};
for (int v : valores) {
[Link](v);
std::cout << "Validando recorrido inorden: ";
[Link]();
std::cout << std::endl;
do {
menu();
std::cin >> op;
switch (op) {
case 1:
std::cout << "Ingrese valor del nodo: ";
std::cin >> valor;
[Link](valor);
break;
case 2:
std::cout << "Recorrido en inorden: ";
[Link]();
break;
case 3:
std::cout << "Ingrese valor del nodo a eliminar: ";
std::cin >> valor;
[Link](valor);
break;
case 4:
std::cout << ([Link]() ? "El arbol esta vacio" : "El arbol no
esta vacio") << std::endl;
break;
} while (op != 0);
return 0;