public static SimpleRope balance(SimpleRope p) { p.updateHeight(); Console.WriteLine(balanceFactor(p)); if (balanceFactor(p) == 2) { Console.WriteLine("rRot"); Console.WriteLine(balanceFactor(p.right)); if (balanceFactor(p.right) < 0) { Console.WriteLine("brRot"); p.right = rightRotation(p.right); } return(leftRotation(p)); } if (balanceFactor(p) == -2) { Console.WriteLine("lRot"); Console.WriteLine(balanceFactor(p.left)); if (balanceFactor(p.left) > 0) { Console.WriteLine("blRot"); p.left = leftRotation(p.left); } return(rightRotation(p)); } else { return(p); } }
private static SimpleRope leftRotation(SimpleRope q) { SimpleRope qcopy = q; SimpleRope y = qcopy.right; SimpleRope T2 = y.left; y.left = q; qcopy.right = T2; qcopy.updateHeight(); y.updateHeight(); return(y); }
private static SimpleRope rightRotation(SimpleRope p) { SimpleRope pcopy = p; SimpleRope x = pcopy.left; SimpleRope T2 = x.right; x.right = pcopy; pcopy.left = T2; pcopy.updateHeight(); x.updateHeight(); return(x); }