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)

Python/Code/ArbolBidimensional (last edited 2010-09-20 20:38:58 by Kmilo)