private TreeNode rotateLeft(TreeNode rotatingNode) {

		TreeNode rotatedTreeRootNode = rotatingNode.right;
		rotatedTreeRootNode.parent = rotatingNode.parent;

		rotatingNode.right = rotatedTreeRootNode.left;

		if (rotatingNode.right != null) {
			rotatingNode.right.parent = rotatingNode;
		}

		rotatedTreeRootNode.left = rotatingNode;
		rotatingNode.parent = rotatedTreeRootNode;

		if (rotatedTreeRootNode.parent != null) {
			if (rotatedTreeRootNode.parent.right == rotatingNode) {
				rotatedTreeRootNode.parent.right = rotatedTreeRootNode;
			} else if (rotatedTreeRootNode.parent.left == rotatingNode) {
				rotatedTreeRootNode.parent.left = rotatedTreeRootNode;
			}
		}

		setBalance(rotatingNode);
		setBalance(rotatedTreeRootNode);

		return rotatedTreeRootNode;
	}