Arboles Bidimensinales...
1 """
2 Arbol Bidimensional...
3 Autor: Diego Andrés Sanabria
4 Licencia: GPL v2.0
5 """
6 class Arbol:
7 # clave es la variable donde se guarda el dato
8 clave=None
9 # es una variable de tipo arbol que contiene el arbol de izq
10 izq=None
11 # es una variable de tipo arbol que contiene el arbol de izq
12 der=None
13 class ArbolBidimensional(Arbol):
14 def __init__(self,x,y,niv=0):
15 self.clave=[x,y]
16 self.niv=niv
17 def __tab__(self,n):
18 a=""
19 for i in range(n):
20 a=a+"\t"
21 return a
22 def __repr__(self):
23 a=""
24 a=a+str(self.clave)+"\n"
25 if self.izq!=None:
26 a=a+self.__tab__(self.izq.niv)+"Izq:"
27 a=a+str(self.izq)+"\n"
28 if self.der!=None:
29 a=a+self.__tab__(self.der.niv)+"Der:"
30 a=a+str(self.der)
31 return a
32 # Es la función que inserta un dato en el arbol
33 def insertar(self, x,y,hor=True):
34 # si la clave es menor que el dato a insertar
35 if hor==True:
36 if self.clave[0]<x:
37 # si el hijo de derecha es nulo
38 if self.der==None:
39 # entonces cree el hijo de izq con el dato
40 self.der=ArbolBidimensional(x,y,self.niv+1)
41 # si el hijo de derecha es nulo
42 else:
43 self.der.insertar(x,y,False)
44 elif self.clave[0]>x:
45 if self.izq==None:
46 self.izq=ArbolBidimensional(x,y,self.niv+1)
47 else:
48 self.izq.insertar(x,y,False)
49 else:
50 if self.clave[0]==x and self.clave[1]==y:
51 print "El dato "+str(x)+" "+str(y)+"ya existe"
52 else:
53 self.insertar(x,y,False)
54 elif hor==False:
55 if self.clave[1]<y:
56 # si el hijo de derecha es nulo
57 if self.der==None:
58 # entonces cree el hijo de izq con el dato
59 self.der=ArbolBidimensional(x,y,self.niv+1)
60 # si el hijo de derecha es nulo
61 else:
62 self.der.insertar(x,y,True)
63 elif self.clave[1]>y:
64 if self.izq==None:
65 self.izq=ArbolBidimensional(x,y,self.niv+1)
66 else:
67 self.izq.insertar(x,y,True)
68 else:
69 if self.clave[0]==x and self.clave[1]==y:
70 print "El dato "+str(x)+" "+str(y)+"ya existe"
71 else:
72 self.insertar(x,y,True)
73 def buscar(self,x,y,hor=True):
74 if self.clave==[x.y]:
75 return True
76 else:
77 if hor==True:
78 if self.clave[0]<x:
79 if self.der!=None:
80 return self.der.buscar(x,y,False)
81 elif self.clave[0]>x:
82 if self.izq!=None:
83 return self.izq.buscar(x,y,False)
84 else:
85 if self.clave[0]==x :
86 return self.insertar(x,y,False)
87 elif hor==False:
88 if self.clave[1]<y:
89 if self.der!=None:
90 return self.der.buscar(x,y,True)
91 elif self.clave[1]>y:
92 if self.izq!=None:
93 return self.izq.buscar(x,y,True)
94 else:
95 if self.clave[0]==x :
96 return self.insertar(x,y,True)
