Este código es propiedad de Diego Andrés Sanabria Martín y es licenciado bajo la GPL v2.0
# archivo arbol.py
1 class Arbol:
2 # clave es la variable donde se guarda el dato
3 clave=None
4 # es una variable de tipo arbol que contiene el arbol de izq
5 izq=None
6 # es una variable de tipo arbol que contiene el arbol de izq
7 der=None
# archivo arolbbin.py
1 from arbol import Arbol
2 class ArbolBin(Arbol):
3 def __init__(self,dato,niv=0):
4 self.clave=dato
5 self.niv=niv
6 def __actNiv__(self,niv=0):
7 self.niv=niv
8 if self.izq:
9 self.izq.__actNiv__(self.niv+1)
10 if self.der:
11 self.der.__actNiv__(self.niv+1)
12 def __tab__(self,n):
13 a=""
14 for i in range(n):
15 a=a+"\t"
16 return a
17 def __repr__(self):
18 a=""
19 a=a+str(self.clave)+"\n"
20 if self.izq!=None:
21 a=a+self.__tab__(self.izq.niv)+"Izq:"
22 a=a+str(self.izq)+"\n"
23 if self.der!=None:
24 a=a+self.__tab__(self.der.niv)+"Der:"
25 a=a+str(self.der)
26 return a
27 # Es la función que inserta un dato en el arbol
28 def insertar(self, dato):
29 # si la clave es menor que el dato a insertar
30 if self.clave<dato:
31 # si el hijo de derecha es nulo
32 if self.der==None:
33 # entonces cree el hijo de izq con el dato
34 self.der=ArbolBin(dato,self.niv+1)
35 # si el hijo de derecha es nulo
36 else:
37 self.der.insertar(dato)
38 elif self.clave>dato:
39 if self.izq==None:
40 self.izq=ArbolBin(dato,self.niv+1)
41 else:
42 self.izq.insertar(dato)
43 else:
44 print "El dato "+str(dato)+"ya existe"
45 def preorden(self):
46 if self.clave!=None:
47 print str(self.clave)
48 if self.izq!=None:
49 self.izq.preorden()
50 if self.der!=None:
51 self.der.preorden()
52 def inorden(self):
53 if self.clave!=None:
54 if self.izq!=None:
55 self.izq.inorden()
56 print str(self.clave)
57 if self.der!=None:
58 self.der.inorden()
59 def postorden(self):
60 if self.clave!=None:
61 if self.izq!=None:
62 self.izq.postorden()
63 if self.der!=None:
64 self.der.postorden()
65 print str(self.clave)
66 def iinorden(self):
67 if self.clave!=None:
68 if self.der!=None:
69 self.der.iinorden()
70 print str(self.clave)
71 if self.izq!=None:
72 self.izq.iinorden()
73 def menor(self):
74 if self.clave!=None:
75 if self.izq!=None:
76 return self.izq.menor()
77 else:
78 return self.clave
79 def mayor(self):
80 if self.clave!=None:
81 if self.der!=None:
82 return self.der.mayor()
83 else:
84 return self.clave
85 def borrar(self,dato):
86 tmp=0
87 if self.clave!=None:
88 if self.clave==dato:
89 if self.izq==None and self.der==None:
90 self.clave=None
91 elif self.izq!=None and self.der==None:
92 self.clave=self.izq.clave
93 self.der=self.izq.der
94 self.izq=self.izq.izq
95 elif self.izq==None and self.der!=None:
96 self.clave=self.der.clave
97 self.izq=self.der.izq
98 self.der=self.der.der
99 elif self.izq!=None and self.der!=None:
100 tmp=self.der.menor()
101 self.clave=tmp
102 self.der.borrar(tmp)
103 elif self.clave<dato:
104 if self.der!=None:
105 self.der.borrar(dato)
106 else:
107 print "El dato "+str(dato)+" No se encontro en el arbol"
108 elif self.clave>dato:
109 if self.izq!=None:
110 self.izq.borrar(dato)
111 else:
112 print "El dato "+str(dato)+"No se encontro en el arbol"
113 self.__actNiv__()
114 def podar(self,dato):
115 if self.clave!=None:
116 if self.clave==dato:
117 self.clave=None
118 self.izq=None
119 self.der=None
120 elif self.clave<dato:
121 if self.der!=None:
122 self.der.podar(dato)
123 elif self.clave>dato:
124 if self.izq!=None:
125 self.izq.podar(dato)
126 def injertar(self,arbol):
127 if self.clave<arbol.clave:
128 if self.der==None:
129 self.der=arbol
130 else:
131 self.der.injertar(arbol)
132 elif self.clave>=arbol.clave:
133 if self.izq==None:
134 self.izq=arbol
135 else:
136 self.izq.injertar(arbol)
137 def buscar(self,dato):
138 if self.clave:
139 if self.clave==dato:
140 return True
141 elif self.clave>dato:
142 if self.izq:
143 return self.izq.buscar(dato)
144 else:
145 return False
146 elif self.clave<dato:
147 if self.der:
148 return self.der.buscar(dato)
149 else:
150 return False
