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]);
}
二叉树将值存储为二叉搜索树。
更多信息:二叉搜索树。
使用了自平衡类型的树,它会平衡节点的深度。
更多信息:自平衡二叉搜索树
用法
用例
您可以查看下方提供的基准测试,了解您是否需要它。它通常在保留长而排序的数据集方面具有优势。它的优势在短数据集上并不明显。
基准测试场景
类型
二叉树对象必须是Comparable
所有num、String、Duration等都是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
}



