private boolean insertAVL(TreeNode currentNode, TreeNode newNode) {

		if (currentNode == null) {

			this.root = newNode;

		} else {

			if (newNode.key < currentNode.key) {

				if (currentNode.left == null) {

					currentNode.left = newNode;
					newNode.parent = currentNode;

					recursiveBalance(currentNode);

				} else {

					return insertAVL(currentNode.left, newNode);

				}

			} else if (newNode.key >= currentNode.key) {

				if (newNode.key != currentNode.key) {

					if (currentNode.right == null) {

						currentNode.right = newNode;
						newNode.parent = currentNode;

						recursiveBalance(currentNode);

					} else {

						return insertAVL(currentNode.right, newNode);

					}

				}

				if (newNode.key == currentNode.key) {

					HashPrinter.alreadyExistsInTree(newNode.key);

					return false;

				}
			}
		}
		return true;
	}