diff --git a/lib/src/treeset.dart b/lib/src/treeset.dart index e96891a..3b65bea 100644 --- a/lib/src/treeset.dart +++ b/lib/src/treeset.dart @@ -37,6 +37,16 @@ class AvlTreeSet extends TreeSet { @override int get length => _root?.length ?? 0; + @override + V elementAt(int index) { + RangeError.checkNotNegative(index, 'index'); + if (index >= length) { + throw IndexError.withLength(index, length, + indexable: this, name: 'index'); + } + return _root!.elementAt(index); + } + @override bool add(V element) { if (_root == null) { @@ -540,6 +550,17 @@ class AvlNode { } return this; } + + V elementAt(int index) { + var l = left?.length ?? 0; + if (index < l) { + return left!.elementAt(index); + } + if (index == l) { + return this.object; + } + return right!.elementAt(index - l - 1); + } } abstract class BidirectionalIterator implements Iterator {