Archives
Trending
Support
Login
clear text
XML
Django
JavaScript
MATLAB
C
C++
C#
Python
SQL
Shell
Bash
Markdown
YAML
JSON
HTML
CSS
PHP
Java
Ruby
Go
Rust
Swift
Kotlin
Arduino
TypeScript
Perl
Autohotkey
Lua
SQF
R
Scala
Haskell
Groovy
Dart
Clojure
VB.NET
Objective-C
PowerShell
Bash
CoffeeScript
Verilog
#include
#include
typedef struct Nodo { int dato; struct Nodo *izq; struct Nodo *der; } Nodo; Nodo* crearNodo(int valor) { Nodo *nuevo = (Nodo*)malloc(sizeof(Nodo)); nuevo->dato = valor; nuevo->izq = NULL; nuevo->der = NULL; return nuevo; } Nodo* insertarConMensaje(Nodo *raiz, int valor, int esPrimerNodo) { if (raiz == NULL) { if (esPrimerNodo) { printf("Ingresa %d al arbol. Su padre es NULL.\n", valor); } return crearNodo(valor); } if (valor < raiz->dato) { if (raiz->izq == NULL) { printf("Ingresa %d al arbol. Su padre es el %d. Es su hijo izquierdo.\n", valor, raiz->dato); } raiz->izq = insertarConMensaje(raiz->izq, valor, 0); } else if (valor > raiz->dato) { if (raiz->der == NULL) { printf("Ingresa %d al arbol. Su padre es el %d. Es su hijo derecho.\n", valor, raiz->dato); } raiz->der = insertarConMensaje(raiz->der, valor, 0); } return raiz; } Nodo* insertar(Nodo *raiz, int valor) { int esPrimero; if (raiz == NULL) { esPrimero = 1; } else { esPrimero = 0; } return insertarConMensaje(raiz, valor, esPrimero); } void imprimirArbolAux(Nodo *raiz, int espacio) { int i; if (raiz == NULL) { return; } espacio += 5; imprimirArbolAux(raiz->der, espacio); printf("\n"); for (i = 5; i < espacio; i++) { printf(" "); } printf("%d\n", raiz->dato); imprimirArbolAux(raiz->izq, espacio); } void verArbol(Nodo *raiz) { if (raiz == NULL) { printf("El arbol esta vacio.\n"); return; } printf("\nEstructura del Arbol:\n"); imprimirArbolAux(raiz, 0); printf("\n"); } void inOrden(Nodo *raiz, int *vector, int *index) { if (raiz != NULL) { inOrden(raiz->izq, vector, index); vector[(*index)++] = raiz->dato; inOrden(raiz->der, vector, index); } } void ordenarVector(Nodo *raiz, int *vector, int tam) { int index = 0; inOrden(raiz, vector, &index); } void imprimirVector(int *vector, int tam) { int i; printf("Vector: [ "); for (i = 0; i < tam; i++) { printf("%d ", vector[i]); } printf("]\n"); } void espejoArbol(Nodo *raiz) { Nodo *temp; if (raiz == NULL) { return; } temp = raiz->izq; raiz->izq = raiz->der; raiz->der = temp; espejoArbol(raiz->izq); espejoArbol(raiz->der); } void liberarArbol(Nodo *raiz) { if (raiz != NULL) { liberarArbol(raiz->izq); liberarArbol(raiz->der); free(raiz); } } int main() { Nodo *raiz = NULL; int opcion, tam, i; int *vector = NULL; int arbolCreado = 0; printf("=== ARBOL BINARIO DE BUSQUEDA ===\n\n"); do { printf("\n--- MENU ---\n"); printf("1. Insertar elementos desde vector\n"); printf("2. Ver Arbol\n"); printf("3. Ordenar vector\n"); printf("4. Imprimir Vector\n"); printf("5. Espejo del Arbol\n"); printf("6. Salir\n"); printf("Opcion: "); if (scanf("%d", &opcion) != 1) { while(getchar() != '\n'); printf("Error: Ingrese solo numeros.\n"); continue; } switch(opcion) { case 1: if (arbolCreado) { printf("El arbol ya fue creado. Liberando arbol anterior...\n"); liberarArbol(raiz); free(vector); raiz = NULL; } printf("Ingrese la cantidad de elementos: "); scanf("%d", &tam); vector = (int*)malloc(tam * sizeof(int)); printf("Ingrese los %d elementos:\n", tam); for (i = 0; i < tam; i++) { printf("Elemento %d: ", i + 1); scanf("%d", &vector[i]); raiz = insertar(raiz, vector[i]); } arbolCreado = 1; printf("\nArbol creado exitosamente!\n"); imprimirVector(vector, tam); break; case 2: if (!arbolCreado) { printf("Primero debe crear el arbol (opcion 1).\n"); } else { verArbol(raiz); } break; case 3: if (!arbolCreado) { printf("Primero debe crear el arbol (opcion 1).\n"); } else { ordenarVector(raiz, vector, tam); printf("\nVector ordenado exitosamente!\n"); } break; case 4: if (!arbolCreado) { printf("Primero debe crear el arbol (opcion 1).\n"); } else { imprimirVector(vector, tam); } break; case 5: if (!arbolCreado) { printf("Primero debe crear el arbol (opcion 1).\n"); } else { espejoArbol(raiz); printf("\nEspejo del arbol creado exitosamente!\n"); verArbol(raiz); } break; case 6: printf("\nSaliendo del programa...\n"); if (arbolCreado) { liberarArbol(raiz); free(vector); } break; default: printf("Opcion invalida. Intente de nuevo.\n"); } } while(opcion != 6); return 0; }
Mark as private (unlisted)
for 30 minutes
for 6 hours
for 1 day
for 1 week
for 1 month
for 1 year
everlasting (like CCCP)