-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy patharbol.c
90 lines (80 loc) · 2.91 KB
/
arbol.c
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
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "structs.c"
void enarbolar(nodo * top, alum * gan, int tiradas){ // raiz y nodo del jugador (alumno) que gano, la maestra tiene un nodo propio que se hara antes de la raiz
if (top->ntiros == 1) {
if (top->izq != NULL) {
enarbolar(top->izq,gan,tiradas);
} else {
// se encontro, y es la raiz
nodo * nv = malloc(sizeof(*nv));
strcpy(nv->apellido,gan->apellido);
strcpy(nv->nombre,gan->nombre);
nv->ntiros=tiradas;
top->izq=nv;
}
} else { // estamos en la raiz a lo mucho
if (strcmp(top->apellido,gan->apellido) > 0) {
// ir por izq
if (top->izq != NULL) {
enarbolar(top->izq,gan,tiradas);
} else {
nodo * nv = malloc(sizeof(*nv));
strcpy(nv->apellido,gan->apellido);
strcpy(nv->nombre,gan->nombre);
nv->ntiros=tiradas;
top->izq=nv;
}
} else if (strcmp(top->apellido,gan->apellido) < 0) {
// ir por der
if (top->der != NULL) {
enarbolar(top->der,gan,tiradas);
} else {
nodo * nv = malloc(sizeof(*nv));
strcpy(nv->apellido,gan->apellido);
strcpy(nv->nombre,gan->nombre);
nv->ntiros=tiradas;
top->der=nv;
}
} else if ((strcmp(top->apellido,gan->apellido)) == 0) {
// es igual y hay que ver el nombre
if ((strcmp(top->nombre,gan->nombre)) > 0) {
// ir por izq
if (top->izq != NULL) {
enarbolar(top->izq,gan,tiradas);
} else {
nodo * nv = malloc(sizeof(*nv));
strcpy(nv->apellido,gan->apellido);
strcpy(nv->nombre,gan->nombre);
nv->ntiros=tiradas;
top->izq=nv;
}
} else if ((strcmp(top->nombre,gan->nombre)) < 0) {
// ir por der
if (top->der != NULL) {
enarbolar(top->der,gan,tiradas);
} else {
nodo * nv = malloc(sizeof(*nv));
strcpy(nv->apellido,gan->apellido);
strcpy(nv->nombre,gan->nombre);
nv->ntiros=tiradas;
top->der=nv;
}
} else if ((strcmp(top->nombre,gan->nombre)) == 0) {
printf("El nodo que quiso insertar ya existe.");
}
}
}
}
void recorrer_a(nodo * top) {
if ( top->izq != NULL) {
recorrer_a(top->izq);
}
if(top->ntiros != 1) {
printf("\n --- %s %s en %i tiros.",top->apellido,top->nombre,top->ntiros);
}
if ( top->der != NULL) {
recorrer_a(top->der);
}
}