def ADD(self, nodo, clave): if (clave == ''): nodo.cant += 1 return act = clave[0] clave = clave[1:] if act == 'A': if nodo.izq == None: nodo.izq = baseN() self.ADD(nodo.izq, clave) if act == 'T': if nodo.der == None: nodo.der = baseN() self.ADD(nodo.der, clave)
def SET(self, nodo, clave, cantidad): if cantidad == 0: self.DELETE(nodo, clave) if (clave == ''): nodo.cant = cantidad return False act = clave[0] clave = clave[1:] if act == 'A': if(nodo.izq == None): nodo.izq = baseN() self.SET(nodo.izq, clave, cantidad) if act == 'T': if(nodo.der == None): nodo.der = baseN() self.SET(nodo.der, clave, cantidad)
def CHANGE(self, secO, secD): #Chequeo de precondicion aux = self.raiz pre = False for i in secD: if(i == 'A'): aux = aux.izq elif(i == 'T'): aux = aux.der if(aux == None): pre = True break if(pre): nodo_O = self.raiz padre_D = self.raiz for i in secO[:-1]: if(i == 'A'): nodo_O = nodo_O.izq elif(i == 'T'): nodo_O = nodo_O.der if(secO[-1] == 'A'): aux = nodo_O nodo_O = nodo_O.izq aux.izq = None elif(secO[-1] == 'T'): aux = nodo_O nodo_O = nodo_O.der aux.der = None for i in secD[:-1]: if(i == 'A'): if(padre_D.izq == None): padre_D.izq = baseN() padre_D = padre_D.izq elif(i == 'T'): if(padre_D.der == None): padre_D.der = baseN() padre_D = padre_D.der if(secD[-1] == 'A'): padre_D.izq = nodo_O elif(secD[-1] == 'T'): padre_D.der = nodo_O else: self.PRINT("ERROR: Cannot CHANGE. Use CHANGEMERGE instead.")
def UnionA(self, nodo1, nodo2): raiz = baseN() cant = 0 if(nodo1 != None): cant += nodo1.cant if(nodo2 != None): cant += nodo2.cant raiz.cant = cant if(nodo1 == None and nodo2 == None): return None elif(nodo1 != None and nodo2 == None): raiz.izq = nodo1.izq raiz.der = nodo1.der elif(nodo1 == None and nodo2 != None): raiz.izq = nodo2.izq raiz.der = nodo2.der else: raiz.izq = self.UnionA(nodo1.izq, nodo2.izq) raiz.der = self.UnionA(nodo1.der, nodo2.der) return raiz
def __init__(self): self.raiz = baseN()