insert(value, current) {
    if (this.root === null) {
      this.root = new Node(value, null, null, null, 1);
      this.keepHeightBalance(this.root);
      return;
    }

    let insertKey;
    current = current || this.root;
    if (current.value > value) {
      insertKey = 'left';
    } else {
      insertKey = 'right';
    }

    if (current[insertKey]) {
      this.insert(value, current[insertKey]);
    } else {
      current[insertKey] = new Node(value, null, null, current);
      this.keepHeightBalance(current[insertKey], false);
    }
  }
Inserts a value as a Node of an AVL Tree.