protected void recursiveBalance(TreeNode currentNode) {

		setBalance(currentNode);
		int balance = currentNode.balance;

		if (balance == -2) {
			if (height(currentNode.left.left) >= height(currentNode.left.right)) {
				currentNode = rotateRight(currentNode);
			} else {
				currentNode = doubleRotateLeftRight(currentNode);
			}
		} else if (balance == 2) {
			if (height(currentNode.right.right) >= height(currentNode.right.left)) {
				currentNode = rotateLeft(currentNode);
			} else {
				currentNode = doubleRotateRightLeft(currentNode);
			}
		}

		if (currentNode.parent != null) {
			recursiveBalance(currentNode.parent);
		} else {
			this.root = currentNode;
		}
	}