#二叉搜索树 #节点树 #二叉树 #根节点 #bst #树根 #不安全

bin+lib unsafe_bst

这是一个简单的二叉搜索树crate,作为课堂项目创建。

6个版本

0.3.2 2024年3月19日
0.3.1 2024年3月19日
0.2.2 2024年3月18日

#172 in 机器学习

Download history 521/week @ 2024-03-15 58/week @ 2024-03-22 49/week @ 2024-03-29

每月204次下载

MIT/Apache

34KB
556

unsafe_bst

Crates.io Docs.rs

概述

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