6个版本
0.3.2 | 2024年3月19日 |
---|---|
0.3.1 | 2024年3月19日 |
0.2.2 | 2024年3月18日 |
#172 in 机器学习
每月204次下载
34KB
556 行
unsafe_bst
概述
unsafe_bst的主要功能是一个库,可以创建和维护二叉搜索树。
该库有BST模块、Node模块和Stat模块的声明。
binary_tree模块
BST模块包含一个BinTree结构体,包含3个字段
struct BinTree{
pub root: crate::nodes::Node,
pub left: Option<Box<BinTree>>,
pub right: Option<Box<BinTree>>,
}
BinTree结构体具有默认含义
let binary_tree = binary_tree::BinTree{..Default::default()};
assert_eq!(binary_tree.root.val, -1);
assert!(binary_tree.left.is_none());
assert!(binary_tree.right.is_none());
BinTree的默认值是一个根节点-1,以及左树和右树为None。
BinTree函数
BinTree还包含库中内置的默认函数
add_node(&mut self, node: nodes::Node)
此函数将节点添加到树中,如果节点尚未在树中
find(&mut self, key: i64) -> bool
如果输入的键在树中,则此函数返回true,否则返回false
print(&mut self, spacing: i64)
以这种形式打印出树
right root left
对于整个树。
为了获得最佳结果,间距应为0
delete(&self, key: i64)
如果键存在于树中,则从树中删除键
注意:删除使用GOTO功能遍历树(通过枚举)
balance(&self, s: &mut Stats) -> BinTree
返回平衡的二叉树
nodes模块
Nodes模块有一个结构体Node,其形式为
struct Node{
val: i64,
}
Node函数
Node没有默认含义,但有1个函数
print(&self)
打印self.val的值,即Node的键
=====================================================
示例
这将打印一个根节点为13,右值为15,左值为11的树
它看起来像这样
11 13 15
let mut b_t = unsafe_bst::binary_tree::BinTree{..Default::default()};
b_t.add_node(unsafe_bst::nodes::Node{val: 13});
b_t.add_node(unsafe_bst::nodes::Node{val: 15});
b_t.add_node(unsafe_bst::nodes::Node{val: 11});
print!("{}",b_t.print(0));
=====================================================
变更日志
v0.3.2 - 在beta v0.3.1中添加了height()函数 - 使delete更安全,不是100%安全,向lib.rs添加了测试
v0.3.0 - 开始使代码更安全:除了delete之外的所有函数都去除了不安全的调用
v0.2.2 - 修复了delete(至少,所有已看到的错误)
v0.2.1 - 修复了balance,使其正常工作
v0.2.0 - 将crate重命名为"unsafe-bst"
v0.1.0 - 以"the_one"的名称创建crate
依赖关系
~310KB