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


CategoryTad

Python/Code/ArbolBinarioOrdenado (last edited 2010-09-20 20:38:26 by Kmilo)