AvlTree remove()

in model/src/main/java/jetbrains/jetpad/model/collections/list/TreeList.java [203:223]


    AvlTree<T> remove(int index) {
      int leftSize = size(myLeft);

      if (index == leftSize) {
        if (myLeft == null) return myRight;
        if (myRight == null) return myLeft;

        T newVal = myRight.get(0);
        return balanceLeft(new AvlTree<>(myLeft, myRight.remove(0), newVal));
      } else if (index < leftSize) {
        if (myLeft == null) {
          throw new IndexOutOfBoundsException();
        }
        return balanceRight(new AvlTree<>(myLeft.remove(index), myRight, myValue));
      } else {
        if (myRight == null) {
          throw new IndexOutOfBoundsException();
        }
        return balanceLeft(new AvlTree<>(myLeft, myRight.remove(index - leftSize - 1), myValue));
      }
    }