Dart 的自平衡二叉搜索树。BST 实现为 Iterable。有许多操作,如 greaterThen、lessThenOrEqual(创建子列表)、max、min 等。

特点

void main() {
  final myNumbers = BinaryTree([10, 8, 16, 4, 9, 13, 25, 2, 6, 12, 26, 14, 18]);
}

二叉树将值存储为二叉搜索树。
更多信息:二叉搜索树

使用了自平衡类型的树,它会平衡节点的深度。
更多信息:自平衡二叉搜索树

img.png

用法

用例

您可以查看下方提供的基准测试,了解您是否需要它。它通常在保留长而排序的数据集方面具有优势。它的优势在短数据集上并不明显。

基准测试场景

img_3.png
img_1.png
img_2.png

类型

二叉树对象必须是Comparable

所有numStringDuration等都是Comparable

您可以将您的对象定义为Comparable

Comparable文档

void main() {
  final myLetters = BinaryTree<String>(["a" , "c",  "b"]);
  final myDates = BinaryTree<DateTime>([DateTime.now()]);
}

基本操作

void main() {
  final myNumbers = BinaryTree([/*initial*/]);
  myNumbers.insert(value);
  myNumbers.remove(value);
  myNumbers.contains(value);
}

迭代器

您可以通过“startsWith”或“endsWith”给定的元素来创建Iterator

f(){
  final myNumbers = BinaryTree([10, 8, 16, 4, 9, 13, 25, 2, 6, 12, 26, 14, 18]);
  final iterator = myNumbers.iteratorFrom(8,greaterThen: true, equal: false); // defaults
  while(iterator.moveNext()) {
    print(iterator.current); // 9 , 10 ... 26
  }
}

您还可以定义边界

f(){
  final myNumbers = BinaryTree([10, 8, 16, 4, 9, 13, 25, 2, 6, 12, 26, 14, 18]);
  final iterator = myNumbers.iteratorFrom(8,bound:Bound(13,equal:true));
  while(iterator.moveNext()) {
    print(iterator.current); // 9 , 10 ... 13
  }
}

toList

您可以使用范围迭代器创建新列表。

f(){
  final myNumbers = BinaryTree([10, 8, 16, 4, 9, 13, 25, 2, 6, 12, 26, 14, 18]);
  
  myNumbers.lessThen(16); /// 14 , 13 , ... 2
  myNumbers.lessThenOrEqual(16); /// 16 , 14 , 13 , ... 2
  myNumbers.greaterThen(16); ///  25 , 26
  myNumbers.greaterThenOrEqual(16); /// 16 , 25 , 26
  
  /// custom bound
  myNumbers.listFrom(16,bound:Bound(13,equal:true));  /// 16 , 14 , 13
  
}

GitHub

查看 Github