-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathbusquedaresiduo.h
98 lines (90 loc) · 2.25 KB
/
busquedaresiduo.h
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
class clavebits
{
private:
int x;
public:
clavebits& operator=(int i)
{
x=i;
return*this;
}
inline unsigned bits(int t,int k, int j)
{
x=t;
return (x>>k)&~(~0<<j);
}
};
class BR
{
private:
struct nodo
{
int clave; //clave utilizada para la busqueda
int info; //dato(s) que contine cualquier informacion relacionada con clave
struct nodo *izq, *der; //punteros nodos a hijos del nodo
nodo(int k, int i, struct nodo *izqizq, struct nodo *derder)
{
clave=k;
info=i;
izq=izqizq;
der=derder;
};
};
struct nodo *cabeza, *z;
clavebits t;
int maxb;
public:
BR(int max)
{
maxb=max;
z=new nodo(0, 0, 0, 0);
cabeza=new nodo(-32767, 0, z, NULL);
}
~BR()
{;};
int buscar(int v);
void insertar(int v, int info);
void imprimir(struct nodo *ndo, int x, int y, int ancho);
};
int BR::buscar(int v)
{
struct nodo *x=cabeza->izq;
int b=maxb;
z->clave=v;
while(v!=x->clave)
x=(t.bits(v, b--,1)) ? x->der : x->izq;
return x->info;
}
void BR::insertar(int v, int info)
{
struct nodo *p, *x;
p=cabeza;
int b=maxb;
x=cabeza->izq;
while(x!=z)
{
p=x;
x=(t.bits(v, b--, 1)) ? x->der :x->izq;
}
x=new nodo(v, info, z, z);
if(t.bits(v, b+1, 1)) p->der=x;
else p->izq=x;
}
void BR::imprimir(struct nodo *ndo, int x, int y, int ancho)
{
int i;
if(ndo==NULL) ndo=cabeza->izq;
for(i=x-ancho+1; i<x+ancho; i++)
{
textcolor(BROWN);
gotoxy(i,y+1);printf("\xc4");
}
textcolor(BROWN);
gotoxy(x-ancho,y+1);printf("\xda");
gotoxy(x,y+1);printf("\xc1");
gotoxy(x+ancho,y+1);printf("\xbf");
textattr(8);
gotoxy(x,y);cprintf("%d",ndo->clave);
if(ndo->izq!=z) imprimir(ndo->izq, x-ancho, y+2, ancho/2);
if(ndo->der!=z) imprimir(ndo->der, x+ancho, y+2, ancho/2);
}