小弧光的博客

公众号:小弧光黑板报

导航

ChatGPT 编写的 Rust 二叉树



// 定义二叉树节点
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);
}

 

posted on 2022-12-06 09:49  小弧光  阅读(146)  评论(0编辑  收藏  举报