AvlTree insert()

in model/src/main/java/jetbrains/jetpad/model/collections/list/TreeList.java [149:176]


    AvlTree<T> insert(int index, T value) {
      int leftSize = size(myLeft);
      if (index <= leftSize) {
        AvlTree<T> unbalanced;
        if (myLeft == null) {
          if (index == 0) {
            unbalanced = new AvlTree<>(new AvlTree<>(value), myRight, myValue);
          } else {
            throw new IndexOutOfBoundsException();
          }
        } else {
          unbalanced = new AvlTree<>(myLeft.insert(index, value), myRight, myValue);
        }
        return balanceLeft(unbalanced);
      } else {
        AvlTree<T> unbalanced;
        if (myRight == null) {
          if (index == leftSize + 1) {
            unbalanced = new AvlTree<>(myLeft, new AvlTree<>(value), myValue);
          } else {
            throw new IndexOutOfBoundsException();
          }
        } else {
          unbalanced = new AvlTree<>(myLeft, myRight.insert(index - 1 - leftSize, value), myValue);
        }
        return balanceRight(unbalanced);
      }
    }