private void insertAVL(TreeNode currentNode, TreeNode newNode) {
        if (currentNode == null) {
            this.root = newNode;
        } else {

            if (newNode.value.compareTo(currentNode.value) < 0) {
                if (currentNode.left == null) {
                    currentNode.left = newNode;
                    newNode.parent = currentNode;

                    recursiveBalance(currentNode);
                } else {
                    insertAVL(currentNode.left, newNode);
                }

            } else if (newNode.value.compareTo(currentNode.value) > 0) {
                if (currentNode.right == null) {
                    currentNode.right = newNode;
                    newNode.parent = currentNode;

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