// 定义二叉树节点
struct Node {
// 节点值
value: i32,
// 左子树
left: Option<Box<Node>>,
// 右子树
right: Option<Box<Node>>,
}
// 定义二叉树
struct BinaryTree {
// 根节点
root: Option<Box<Node>>,
}
// 为二叉树实现插入节点的方法
impl BinaryTree {
// 在二叉树中插入新的节点
fn insert(&mut self, value: i32) {
// 如果根节点为空,则新节点为根节点
if self.root.is_none() {
self.root = Some(Box::new(Node {
value,
left: None,
right: None,
}));
return;
}
// 否则,从根节点开始遍历二叉树
let mut current = self.root.as_mut().unwrap();
loop {
// 如果新值比当前节点的值小,则继续遍历左子树
if value < current.value {
if current.left.is_none() {
// 如果左子树为空,则新节点为左子节点
current.left = Some(Box::new(Node {
value,
left: None,
right: None,
}));
break;
}
current = current.left.as_mut().unwrap();
} else {
// 否则,继续遍历右子树
if current.right.is_none() {
// 如果右子树为空,则新节点为右子节点
current.right = Some(Box::new(Node {
value,
left: None,
right: None,
}));
break;
}
current = current.right.as_mut().unwrap();
}
}
}
}
// 测试二叉树插入节
// 测试二叉树插入节点的方法
fn main() {
let mut tree = BinaryTree { root: None };
// 插入 5、3、8、1、4、7、10 这些值
tree.insert(5);
tree.insert(3);
tree.insert(8);
tree.insert(1);
tree.insert(4);
tree.insert(7);
tree.insert(10);
// 检查插入后的二叉树是否正确
assert_eq!(tree.root.as_ref().unwrap().value, 5);
assert_eq!(tree.root.as_ref().unwrap().left.as_ref().unwrap().value, 3);
assert_eq!(tree.root.as_ref().unwrap().right.as_ref().unwrap().value, 8);
assert_eq!(tree.root.as_ref().unwrap().left.as_ref().unwrap().left.as_ref().unwrap().value, 1);
assert_eq!(tree.root.as_ref().unwrap().left.as_ref().unwrap().right.as_ref().unwrap().value, 4);
assert_eq!(tree.root.as_ref().unwrap().right.as_ref().unwrap().left.as_ref().unwrap().value, 7);
assert_eq!(tree.root.as_ref().unwrap().right.as_ref().unwrap().right.as_ref().unwrap().value, 10);
}
标签:right,unwrap,root,tree,value,二叉树,ChatGPT,ref,Rust From: https://www.cnblogs.com/itfanr/p/16954356.html