Método Insertar nuevos datos


public void Insertar(int dato){

	if(raiz == null){
	Nodo n = new Nodo(dato);
		raiz = n;
	} else{
		Insertar(dato, this.raiz);                   
}

}

private void Insertar(int dato, Nodo n){

	if(dato < n.info){  
		if(n.getIzq() == null){ 
	Nodo n = new Nodo(dato);
			n.setIzq(n);
			n.actualizarAltura();
		} else {
			Insertar(dato, n.getIzq());
		}
	} else { 
		if(n.getDer() == null){
	Nodo n = new Nodo(dato);
			n.setDer(n);
			n.actualizarAltura();
		} else {
			Insertar(dato, n.getDer());
		}
	}

int factor = n.getFactor();
	int factorIzq = n.getIzq().getFactor();
	int factorDer = n.getDer().getFactor();
	if(factor == 2){
		if(factorDer == 1 || factorDer == 0){
			RotarSimpleIzquierda(n);
		} else {
			RotarDobleDerecha(n);
		}
	} else if(factor == -2){
		if(factorIzq == 1 || factorDer == 0){
			RotarSimpleDerecha(n);
		} else {
			RotarDobleIzquierda(n);
		}
	}
	n.actualizarAltura();
}


T(n) = C1 + Max(C2+T1(n/2), C3+T1(n/2)) + C4

T(n) = C1 + C2 + T(n/2) + C3

T(n) = C + T(n/2)

T(n) = 2C + T(n/4)

T(n) = 3C + T(n/8)

T(n) = kC + T(n/2k)                           n = 2k    ->  k = log2 n

T(n) = C*log2 n + T(n/n)

T(n) = C * log2 n + 1

O(log2n)