También les dejo un ejercicio que utiliza Árbol Binario para ordenar palabras y buscarlas según lo que se ingresa: se puede buscar palabras de una WEB (ingresando previamente la url) o de algún archivo TXT, solo es cuestión de ver la implementación (iarbol.py)
classArbol: ''' Constructor de Arbol lo crea vacio ''' def__init__(self, data): ''' Constructor con parametros vacios ''' self.izq = None self.drch = None self.data = data
defClista(self, data): ''' creamos la lista en cada nodo segun las letras del alfabeto ''' if data < self.data: if self.izq isNone: self.izq = Arbol(data) else: self.izq.Clista(data) else: if self.drch isNone: self.drch = Arbol(data) else: self.drch.Clista(data)
definserta(self, data): ''' recorre el arbol comparando la primera letra con los nodos, y se inserta en el nodo correspondiente ''' data=list(data) try: if data[0] < self.data[0]: self.izq.inserta(data) elif data[0] > self.data[0]: self.drch.inserta(data) elif data[0] == self.data[0]: self.data.append(data) except: a=-1
defbuscar(self, data): ''' recorre el arbol y busca donde se encuentra la lista correspondiente ''' cont=0 data=list(data) try: if data[0] < self.data[0]: self.izq.buscar(data) elif data[0] > self.data[0]: self.drch.buscar(data) else: num=len(data) for i in range(len(self.data)): if data==self.data[i][0:num]: print i,">>", cont=cont+1 print"".join(self.data[i]) print"total de coincidencias: ",cont except: a=-1
defverArbol(self): ''' imprime todo el arbol ''' if self.izq: self.izq.verArbol() print self.data if self.drch: self.drch.verArbol()
lista = 'a b c d e f g h i j k l m n o p q r s t u v w x y z'
#creo una lista con letras minusculas
lista = lista.split(' ')
# creo los nodos mayusculas
#listaM=[]
for i in range(len(lista)): listaM.push(lista[i].upper()) #busco la raiz (la letra intermedia del abecedario) iraiz=len(lista)/2 raiz=list(lista[iraiz])
#creo la raiz del arbol arbol = arbol.Arbol(raiz) #creo las listas en los nodos
for palabra in lista: if palabra!=raiz[0]: arbol.Clista(list(palabra)) #inserto los nodos mayuscula for i in range(len(listaM.lista)): arbol.Clista(list(listaM.belemento(i))) #leo una pagina web web=raw_input("ingrese la pagina web que desea leer ( si desea leer un archivo local escriba local): ")
if web=="local": archivo=open('Archivo.txt') archivo=archivo.read() a=archivo.split(' ') elif web.startswith('www'): archivo=urllib2.urlopen('http://'+web) archivo=archivo.read() a=re.findall(r'\w+',archivo) else: print"error D:" for i in range(len(a)-1): arbol.inserta(a[i]) s="S" while(s=="S"): palabra=raw_input("ingrese palabra: ") arbol.buscar(palabra) s=raw_input("desea seguir?[S/N]: ").upper() print"usted salio del programa"
y una pequeña clase de nombre “lista.py” que como se darán cuenta no implementa las primitivas con los nombres comunes para el TAD lista , pero pueden checar y corregir para que se ajuste a lo que les pidan.
Como verán en el último ejercicio gracias a la magia de python, como diria Ider (un amigo que me dio la luz para comenzar) se pueden organizar las palabras jerárquicamente como si de números se tratara ( de mayor a menor) y facilitándonos la tarea en la organización del árbol binario.
Implementar los TDA en python es relativamente sencillo y pues solo es cuestión de dar una leida a la teoría, espero que les sirva esto.
Carlos Ganoza
I have more than 6 years of experience in the technology market, I have been involved in different aspects of software development, cybersecurity, and open-source. I ♥ python, the open-source, and I always enjoy learning new skills.