示例#1
0
 def __cantidadDeNodo(self, nodoActual):
     if Nodo.esNodoVacio(nodoActual):
         return 0
     cantidadPorIzquierda = self.__cantidadDeNodo(
         nodoActual.getHijoIzquierdo())
     cantidadPorDerecha = self.__cantidadDeNodo(nodoActual.getHijoDerecho())
     return cantidadPorIzquierda + cantidadPorDerecha + 1
示例#2
0
 def __alturaRec(self, nodoActual):
     if Nodo.esNodoVacio(nodoActual):
         return 0
     alturaPorIzquierda = self.__alturaRec(nodoActual.getHijoIzquierdo())
     alturaPorDerecha = self.__alturaRec(nodoActual.getHijoDerecho())
     if alturaPorDerecha > alturaPorIzquierda:
         return alturaPorDerecha + 1
     return alturaPorIzquierda + 1
示例#3
0
 def postOrdenR(self, nodoActual, recorrido):
     if Nodo.esNodoVacio(nodoActual):
         return
     nodoHijoPorIzquierda = nodoActual.getHijoIzquierdo()
     self.postOrdenR(nodoHijoPorIzquierda, recorrido)
     nodoHijoPorDeracha = nodoActual.getHijoDerecho()
     self.postOrdenR(nodoHijoPorDeracha, recorrido)
     recorrido.append(nodoActual.getDato())
示例#4
0
 def buscar(self, dato):
     nodoAuxiliar = self.raiz
     while not Nodo.esNodoVacio(nodoAuxiliar):
         if dato == nodoAuxiliar.getDato():
             return nodoAuxiliar.getDato()
         if dato < nodoAuxiliar.getDato():
             nodoAuxiliar = nodoAuxiliar.getHijoIzquierdo()
         else:
             nodoAuxiliar = nodoAuxiliar.getHijoDerecho()
     return None
示例#5
0
 def hermanoDeUnNodo(self, dato):
     if self.esArbolVacio() or self.cantidadDeNodo() == 1 or self.raiz.getDato() == dato:
         raise ValueError
     nodoActual = self.raiz
     nodoPadre = Nodo.nodoVacio()
     while dato != nodoActual.getDato() and not Nodo.esNodoVacio(nodoActual):
         nodoPadre = nodoActual
         if dato < nodoActual.getDato():
             nodoActual = nodoActual.getHijoIzquierdo()
         else:
             nodoActual = nodoActual.getHijoDerecho()
     if dato == nodoActual.getDato():
         if nodoPadre.getHijoIzquierdo().getDato() == dato:
             return nodoPadre.getHijoDerecho()
         else:
             return nodoPadre.getHijoIzquierdo()
     else:
         raise ValueError
示例#6
0
 def insertar(self, dato):
     if self.esArbolVacio():
         self.raiz = Nodo(dato)
     nodoActual = self.raiz
     nodoAnterior = Nodo.nodoVacio()
     # buscar la posicion del nuevoNodo
     while not Nodo.esNodoVacio(nodoActual):
         if dato == nodoActual.getDato():
             return False
         nodoAnterior = nodoActual
         if dato < nodoActual.getDato():
             nodoActual = nodoActual.getHijoIzquierdo()
         else:
             nodoActual = nodoActual.getHijoDerecho()
         # fin del ciclo
     # se inserte el nuevoNodo en su posicion
     nuevoNodo = Nodo(dato)
     if dato < nodoAnterior.getDato():
         nodoAnterior.setHijoIzquierdo(nuevoNodo)
     else:
         nodoAnterior.setHijoDerecho(nuevoNodo)
     # ------------------------------------------
     return True
示例#7
0
 def esArbolVacio(self):
     return Nodo.esNodoVacio(self.raiz)
示例#8
0
 def buscarDatoSucesor(self, nodoActual):
     nodoAnterior = nodoActual
     while not Nodo.esNodoVacio(nodoActual):
         nodoAnterior = nodoActual
         nodoActual = nodoActual.getHijoIzquierdo()
     return nodoAnterior.getDato()