-
Notifications
You must be signed in to change notification settings - Fork 2
/
ArvorePesquisaBinariaSemBalanceamento.c
127 lines (111 loc) · 2.42 KB
/
ArvorePesquisaBinariaSemBalanceamento.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
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
#include <stdbool.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
typedef struct{
char nome[50];
int idade;
} registro;
typedef struct no {
registro reg;
struct no *pEsq, *pDir;
} no;
void pesquisa(registro *x, no *p){
if (p == NULL) {
printf("Registro nao encontrado\n");
return;
}
if (x->idade < p->reg.idade) {
pesquisa(x, p->pEsq);
return;
}
if (x->idade > p->reg.idade) {
pesquisa(x, p->pDir);
return;
}
*x = p->reg;
}
void antecessor(no *q, no **r){
no *aux;
if((*r)->pDir != NULL){
antecessor(q, &(*r)->pDir);
return;
}
q->reg= (*r)->reg;
aux=*r;
*r=(*r)->pEsq;
free(aux);
}
void retira(registro x, no **p){
no *aux;
if(*p==NULL){
printf("Arvore vazia");
return;
}
if(x.idade < (*p)->reg.idade){
retira(x, &((*p)->pEsq));
return;
}
if(x.idade > (*p)->reg.idade){
retira(x, &((*p)->pDir));
return;
}
if((*p)->pDir == NULL){
aux=*p;
*p=(*p)->pEsq;
free(aux);
return;
}
if((*p)->pEsq != NULL){
antecessor(*p, &(*p)->pEsq);
return;
}else{
aux=*p;
*p=(*p)->pDir;
free(aux);
}
}
void insere(registro *x, no **p) {
if(*p == NULL) {
*p = (no*)malloc(sizeof(no));
(*p)->reg = *x;
(*p)->pEsq = NULL;
(*p)->pDir = NULL;
return;
}
if (x->idade < (*p)->reg.idade) {
insere(x, &((*p)->pEsq));
} else if (x->idade > (*p)->reg.idade) {
insere(x, &((*p)->pDir));
} else {
printf("Registro ja existe na arvore\n");
}
}
int main() {
no *raiz = NULL;
registro search;
registro x;
x.idade = 20;
strcpy(x.nome, "teste1");
insere(&x, &raiz);
registro y;
y.idade = 300;
strcpy(y.nome, "teste2");
insere(&y, &raiz);
registro z;
z.idade = 10;
strcpy(z.nome, "teste3");
insere(&z, &raiz);
search.idade = 20;
pesquisa(&search, raiz);
printf("Resultado da pesquisa: %s\n", search.nome);
memset(&search, 0, sizeof(search));
search.idade = 30;
pesquisa(&search, raiz);
printf("Resultado da pesquisa: %s\n", search.nome);
memset(&search, 0, sizeof(search));
search.idade = 10;
pesquisa(&search, raiz);
printf("Resultado da pesquisa: %s\n", search.nome);
return 0;
}