Ayuda con Arbol Binario Sin recursividad en C
Publicado por Patricio (25 intervenciones) el 08/05/2019 17:46:33
Este es el codigo que escribi del arbol binario hecho con recursividad pero estoy tratando de crear el arbol sin recursividad y no logro ver como hacerlo. Pueden mostrarme como seria el codigo SIN recursividad???
Gracias.
Gracias.
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
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
#include <stdio.h>
#include <stdlib.h>
typedef struct nodo abb;
struct nodo
{
int dato;
abb *der;
abb *izq;
};
abb *nuevoAbb(){
return (abb *)malloc(sizeof(abb)); // solicita memoria para nuevo nodo y lo retorna.
}
abb *insertarAbb(abb *t, int dato){ //abb *t es la raiz. es el primer dato en el arbol.
abb *p = nuevoAbb();
p->dato = dato;
p->izq = p->der = NULL;
if(t==NULL)
return p;
if(p->dato < t->dato) //Ve si t dato es mayor que p dato.
t->izq = insertarAbb(t->izq,dato);//si es menor lo mete en la izquierda
else
t->der = insertarAbb(t->der,dato); //si es mayor lo mete a la derecha
return t; //Devuelve el valor de t al avanzar, el t se va reemplazando en los ifs
}
int sumar_modulo (abb *t)
{
if (t==NULL)
return 0;
else{
return (t -> dato + sumar_modulo (t->izq) + sumar_modulo (t-> der) );
}
}
int buscarDato(abb *t, int dato) //busqueda normal usando recursivdad
{
if(t==NULL)
return 0;
if(t->dato==dato) //encontro el dato
return 1;
if(dato < (t->dato))
return buscarDato(t->izq,dato); //recursividad, vuelve al inicio y se mueve a la izquierda
else
return buscarDato(t->der,dato);//recursividad, vuelve al inicio y se mueve a la izquierda
}
void mostrarAbb(abb *t)
{
if(t!=NULL)
{
printf("%d\n",t->dato);
mostrarAbb(t->izq);
mostrarAbb(t->der); //es corto el codigo gracias a recursividad
}//el programa principal estaria haciendo la acomulacion si tubieramos que estar acomulando los valores, pa eso habria que retornar el valor
}
/* comienza el recorrido inorden del árbol */
void inOrden(abb *t)
{
/* si el árbol no está vacío, entonces recórrelo */
if (t != NULL) {
inOrden(t->izq);
printf("%3d", t->dato);
inOrden(t->der);
}
}
/* comienza el recorrido preorden del árbol */
void preOrden(abb *t)
{
/* si el árbol no está vacío, entonces recórrelo */
if (t != NULL) {
printf("%3d", t->dato);
preOrden(t->izq);
preOrden(t->der);
}
}
/* comienza el recorrido postOrden del árbol */
void postOrden(abb *t)
{
/* si el árbol no está vacío, entonces recórrelo */
if (t != NULL) {
postOrden(t->izq);
postOrden(t->der);
printf("%3d", t->dato);
}
}
// ***************************** Programa Ppal ********************************* //
int main(int argc, char *argv[])
{
abb *t = nuevoAbb();
t->dato = 15;
t->izq = t->der = NULL;
insertarAbb(t,7);
insertarAbb(t,18);
insertarAbb(t,8);
insertarAbb(t,37);
insertarAbb(t,56);
insertarAbb(t,90);
insertarAbb(t,20);
printf ("\n\n\t Mostrar recorrido:\n");
mostrarAbb(t);
int num;
int sumatotal = sumar_modulo(t);
printf("\n\n La suma1 Total es: %d", sumatotal);
printf("\n\n La suma2 Total es: %d", sumar_modulo(t));
printf("\n ____________________________________________________________");
printf("\n\n\t Ingrese numero a Buscar: ");
scanf("%d",&num);
printf("\n\n\t Buscar nodo en el arbol con raiz: %d , con valor : %i ", &t, num);
if(buscarDato(t, num))
printf("\n\t Encontrado");
else
printf("\n\t No encontrado");
/* recorre el árbol en preorden */
printf ("\n\n\tEl recorrido en Preorden es:\n");
preOrden(t);
/* recorre el árbol en in inorden */
printf("\n\n\t El recorrido Inorden es:\n");
inOrden(t);
/* recorre el árbol en postOrden */
printf("\n\n\tEl recorrido en PostOrden es:\n");
postOrden(t);
return 0;
}
Valora esta pregunta
0