Bienvenido a   :: LINUX SOLUTIONS CENTER ::

México,  Jueves 21 de Agosto del 2008   
  Hora Local
Home Programacion Creacion de un Arbol de Busqueda en Python
LINUX es nuestra Especialidad: · Servidores de Internet · Monitoreo de Servidores y Enlaces · Virtualizacion · Firewalls con OpenSource · Proxy Servers (Web Cache) · DNS y DHCP · Web Server · Webmail · NAT's · IP Forwarding · FTP Server · Email Attachmnt Filtering · Reportes estadisticos · Linux Gateway/Router · Bloqueo de Puertos · Email Server · Reporte de todo el trafico interno/externo · Administracion de Ancho de banda · VPN's con Open VPN · Soporte Ténico comercial · Administración de servidores Linux (RedHat EL/AS, Debian, CentOs, etc) · Instalación y Configuración de Servidores · Configuración de servidores de E-Mail (Sendmail, Qmail, Postfix con virtual domains) · Antvirus con OpenSource · Administración de LVM · y mas... mucho mas

El Clima
Current Thu, 21 Aug 2008 12:52 pm CDT
City: Ocoyucan
Cloudy
sunrise: 7:15 am
sunset: 7:56 pm
Act: 18°
Máx: 19°
Mín: 12°

Esta NocheMañana
Scattered
Thunderstorms
Scattered
Thunderstorms
 
Máx: 19°
Mín: 12°
Máx: 21°
Mín: 12°

Próximos Cursos de GNU/Linux Julio 2008 en Puebla y más


Banner Advertisement

Otros Productos y servicios aquí


Creacion de un Arbol de Busqueda en Python PDF Imprimir E-mail
Programacion Unix-Linux
Escrito por Fvasquez   
Viernes, 16 de Mayo de 2008 17:18

Hola a todos nuevamente por aqui...

Me he dado a la tarea de aprender python el cual me parece un excelente lenguaje de programacion, ademas el interprete en linea de comando es excelente y pues aqui dejo un problema que tenia y que lo resolvi con la ayuda de estas herramientas..

El problema:

Debia construir un arbol de busqueda, pero con ciertas caracteristicas que no se apegan a los codigos que encontre en el internet ( solo hay codigos de arboles B, B+, Balanceados) lo cual no me servia, lo que necesitaba es un arbol al cual le pudiera ingresar nodos no importando la posicion, siempre y cuando tuvieran un padre, ademas el dato almacenado en los nodos no importa.

Se podria tener un arbol con la siguiente descripcion por ejemplo:

arbol

Fijandonos un poco en el valor de los nodos nos damos cuenta de que no esta ordenado, ni tampoco balanceado, se necesita que pueda ingresar cualquier valor en cualquier momento, siempre y cuando tenga padre y tambien espacio ya sea a la derecha o a la izquierda

Asi que este es el resultado del codigo....

#====================================================================
# Arbol.py
# Programa para la creacion de arboles que no forzozamente tienen
# que estar balanceados, ademas que no forzozamente deben comenzar las
# inserciones de nodos por la raiz
#
# Autor: Faustino Vasquez limon
#
#====================================================================

class Arbol:
def __init__(self,valor):
self.valor = valor
self.izquierda = None
self.derecha = None

#Metodo para agregar nodos a la izquierda del arbol, no importando que nodo
#del arbol queremos como padre de este
def AgregaIzquierda(self,padre,dato):
if self.valor != padre:
if self.izquierda != None:
self.izquierda.AgregaIzquierda(padre,dato)
if self.derecha!=None:
self.derecha.AgregaIzquierda(padre,dato)
else:
self.izquierda=Arbol(dato)

#Metodo para agregar nodos a la derecha, no importando que nodo del arbol
#queremos como padre de este
def AgregaDerecha(self,padre,dato):
if self.valor != padre:
if self.izquierda != None:
self.izquierda.AgregaDerecha(padre,dato)
if self.derecha!=None:
self.derecha.AgregaDerecha(padre,dato)
else:
self.derecha = Arbol(dato)

#Metodo que nos permite buscar un elemento en forma recursiva
def BuscaNodo(self,dato):
if self.valor != dato:
if self.izquierda!=None:
return self.izquierda.BuscaNodo(dato)
if self.derecha!=None:
return self.derecha.BuscaNodo(dato)
else:
return self.valor

#Metodo para impresion del arbol comenzando Primero Izquierda usando recursividad
def ImprimeArbolIzq(self):
if self.valor!=None:
print self.valor
if self.izquierda!=None:
self.izquierda.ImprimeArbolIzq()
if self.derecha!=None:
self.derecha.ImprimeArbolIzq()

#Metodo para impresion del arbol comenzando primero por la derecha usando recursividad
def ImprimeArbolDer(self):
if self.valor!=None:
print self.valor
if self.derecha!=None:
self.derecha.ImprimeArbolDer()
if self.izquierda!=None:
self.izquierda.ImprimeArbolDer()

# .......................... 9
# ....................23......61
# ..............64..................81
# ..........7.......44..... 26
# ....................................55
# Crearemos la anterior estructura de en la forma primero izquierda y luego
# derecha es decir que antes de crear un nodo derecho para la raiz tendremos que
# crear un nodo derecho para el 64, de hecho se pude ingresar un nodo en cualquier
# momento la unica condicion es que exista un padre para este nuevo nodo

arbol= Arbol(9)
# AgregaIzquierda(padre,dato)
arbol.AgregaIzquierda(9,23)
arbol.AgregaIzquierda(23,64)
arbol.AgregaIzquierda(64,7)
arbol.AgregaDerecha(64,44)
arbol.AgregaDerecha(9,61)
arbol.AgregaDerecha(61,81)
arbol.AgregaIzquierda(81,26)
arbol.AgregaDerecha(26,55)

print
print 'Impresion del arbol comenzando por la izquierda'
arbol.ImprimeArbolIzq()
print
print
print 'Impresion del arbol comenzando por la derecha'
arbol.ImprimeArbolDer()
print
print
print 'Buscando un valor'
valor = arbol.BuscaNodo(7)
print valor
print


Esperando como siempre que esto le sirva a alguien

Atte: Faustino Vasquez Limon

Linux User

 

 

Actualizado ( Viernes, 16 de Mayo de 2008 19:06 )
 


Encuestas
¿Cuál es tu navegador favorito?
 
Anunciate aquí

Centro de Soluciones Linux

KoalaSoft-Sitio de Amigos

ODM SYSTEM MEXICO




No. de Visitas
mod_vvisit_countermod_vvisit_countermod_vvisit_countermod_vvisit_countermod_vvisit_countermod_vvisit_counter
mod_vvisit_counterHoy132
mod_vvisit_counterAyer214
mod_vvisit_counterEsta Semana876
mod_vvisit_counterEste Mes5234
mod_vvisit_counterTotal42406
Linuxsc en RSS
Archivo Historico

Ultimo Reporte
Alexa-Rank
Alexa-Rank