Ayuda con arboles binarios
Publicado por Sebastian (12 intervenciones) el 19/09/2021 00:15:01
Hola, tengo el siguiente programa, el cual ya esta compilando.
pero ahora necesito introducir un menú con lo siguiente:
1. Insertar dato
2. Salir
Al momento que inserte el dato me debe imprimir el valor de acuerdo al preorden, inorden y posorden.
Lo he intentado de varias formas pero no me sale el resultado esperado
Agradezco su mas pronta colaboración
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
#include <stdio.h>
#include <stdlib.h>
struct Nodo {
int dato;
struct Nodo *izquierda;
struct Nodo *derecha;
};
struct Nodo *nuevoNodo(int dato) {
// Solicitar memoria
size_t tamanioNodo = sizeof(struct Nodo);
struct Nodo *nodo = (struct Nodo *) malloc(tamanioNodo);
// Asignar el dato e iniciar hojas
nodo->dato = dato;
nodo->izquierda = nodo->derecha = NULL;
return nodo;
}
void insertar(struct Nodo *nodo, int dato) {
// ¿Izquierda o derecha?
// Si es mayor va a la derecha
if (dato > nodo->dato) {
// Tienes espacio a la derecha?
if (nodo->derecha == NULL) {
nodo->derecha = nuevoNodo(dato);
} else {
// Si la derecha ya está ocupada, recursividad ;)
insertar(nodo->derecha, dato);
}
} else {
// Si no, a la izquierda
if (nodo->izquierda == NULL) {
nodo->izquierda = nuevoNodo(dato);
} else {
// Si la izquierda ya está ocupada, recursividad ;)
insertar(nodo->izquierda, dato);
}
}
}
void preorden(struct Nodo *nodo) {
if (nodo != NULL) {
printf("%d,", nodo->dato);
preorden(nodo->izquierda);
preorden(nodo->derecha);
}
}
void inorden(struct Nodo *nodo) {
if (nodo != NULL) {
inorden(nodo->izquierda);
printf("%d,", nodo->dato);
inorden(nodo->derecha);
}
}
void postorden(struct Nodo *nodo) {
if (nodo != NULL) {
postorden(nodo->izquierda);
postorden(nodo->derecha);
printf("%d,", nodo->dato);
}
}
int main(void) {
struct Nodo *raiz = nuevoNodo(28);
insertar(raiz, 11);
insertar(raiz, 96);
insertar(raiz, 21);
insertar(raiz, 6);
insertar(raiz, 97);
insertar(raiz, 1);
insertar(raiz, 30);
insertar(raiz, 10);
insertar(raiz, 2);
printf("\nImprimiendo preorden\n");
preorden(raiz);
printf("\nImprimiendo inorden\n");
inorden(raiz);
printf("\nImprimiendo postorden\n");
postorden(raiz);
}
pero ahora necesito introducir un menú con lo siguiente:
1. Insertar dato
2. Salir
Al momento que inserte el dato me debe imprimir el valor de acuerdo al preorden, inorden y posorden.
Lo he intentado de varias formas pero no me sale el resultado esperado
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
#include <stdio.h>
#include <stdlib.h>
struct Nodo {
int dato;
struct Nodo *izquierda;
struct Nodo *derecha;
};
struct Nodo *nuevoNodo(int dato) {
// Solicitar memoria
size_t tamanioNodo = sizeof(struct Nodo);
struct Nodo *nodo = (struct Nodo *) malloc(tamanioNodo);
// Asignar el dato e iniciar hojas
nodo->dato = dato;
nodo->izquierda = nodo->derecha = NULL;
return nodo;
}
void insertar(struct Nodo *nodo, int dato) {
// ¿Izquierda o derecha?
// Si es mayor va a la derecha
if (dato > nodo->dato) {
// Tienes espacio a la derecha?
if (nodo->derecha == NULL) {
nodo->derecha = nuevoNodo(dato);
} else {
// Si la derecha ya está ocupada, recursividad ;)
insertar(nodo->derecha, dato);
}
} else {
// Si no, a la izquierda
if (nodo->izquierda == NULL) {
nodo->izquierda = nuevoNodo(dato);
} else {
// Si la izquierda ya está ocupada, recursividad ;)
insertar(nodo->izquierda, dato);
}
}
}
void preorden(struct Nodo *nodo) {
if (nodo != NULL) {
printf("%d,", nodo->dato);
preorden(nodo->izquierda);
preorden(nodo->derecha);
}
}
void inorden(struct Nodo *nodo) {
if (nodo != NULL) {
inorden(nodo->izquierda);
printf("%d,", nodo->dato);
inorden(nodo->derecha);
}
}
void postorden(struct Nodo *nodo) {
if (nodo != NULL) {
postorden(nodo->izquierda);
postorden(nodo->derecha);
printf("%d,", nodo->dato);
}
}
int main()
{
int opcion;
do {
system("cls");
printf("Valores de una pila\n\n");
printf("MENU\n\n");
printf("[1] Insertar Datos\n");
printf("[2] Salir\n\n->");
scanf("%i", &opcion);
switch (opcion)
{
case 1:
printf("Digite un número\n");
scanf("%i", dato);
insertarNodo(nodo,dato);
printf("\nImprimiendo preorden\n");
preorden(raiz);
printf("\nImprimiendo inorden\n");
inorden(raiz);
printf("\nImprimiendo postorden\n");
postorden(raiz);
printf("END ]\n");
system("PAUSE");
break;
case 2:
printf("\nFin del programa\n\n");
system("PAUSE");
break;
default:
printf("\nOpcion no valida\n\n");
system("PAUSE");
break;
}
}while (opcion != 2);
}
Agradezco su mas pronta colaboración
Valora esta pregunta
0