private void 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 {
					insertAVL(currentNode.left, newNode);
				}

			} else if (newNode.key > currentNode.key) {
				if (currentNode.right == null) {
					currentNode.right = newNode;
					newNode.parent = currentNode;

					recursiveBalance(currentNode);
				} else {
					insertAVL(currentNode.right, newNode);
				}
			} else {
				System.out.println("\nKey " + newNode.key + " already exists. Ignoring...");
			}
		}
	}