首页 > 其他分享 >ChatGPT 编写的 Rust 二叉树

ChatGPT 编写的 Rust 二叉树

时间:2022-12-06 09:55:22浏览次数:46  
标签:right unwrap root tree value 二叉树 ChatGPT ref 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);
}

 

标签:right,unwrap,root,tree,value,二叉树,ChatGPT,ref,Rust
From: https://www.cnblogs.com/itfanr/p/16954356.html

相关文章

  • 根据前序和中序遍历重建二叉树
    关于最近最近在看算法相关的,接下来想记录一下自己学习的、个人认为比较值得记录的算法。这篇博客主要是用自己的理解复述了根据中序、前序遍历重建二叉树这个博客的内容,......
  • 二叉树基本操作代码实现
    #include<stdio.h>#include<stdlib.h>//exit#include<malloc.h>//定义二叉链表结点结构typedefstructnode{ intdata; structnode*lchild,*rchild;}BiTr......
  • leetcode 101. 对称二叉树 js实现
    给你一个二叉树的根节点 root ,检查它是否轴对称。示例1:输入:root=[1,2,2,3,4,4,3]输出:true示例2:输入:root=[1,2,2,null,3,null,3]输出:false 提示:树......
  • 求二叉树中最大的二叉搜索子树的头节点
    求二叉树中最大的二叉搜索子树的头节点作者:Grey原文地址:博客园:求二叉树中最大的二叉搜索子树的头节点CSDN:求二叉树中最大的二叉搜索子树的头节点题目描述给定一棵二......
  • 记rust操作mysql增删查改
    //Cargo.toml[dependencies]mysql="*"chrono="0.4"//filename:mysql_helper.rs//filename:mysql_helper.rsusemysql::*;usemysql::prelude::*;pubstructUser{......
  • 【LeeCode】94. 二叉树的中序遍历
    【题目描述】给定一个二叉树的根节点 ​​root​​ ,返回 它的 中序 遍历 。​​​https://leetcode.cn/problems/binary-tree-inorder-traversal/description/?favori......
  • 【LeeCode】104. 二叉树的最大深度
    【题目描述】给定一个二叉树,找出其最大深度。二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。说明: 叶子节点是指没有子节点的节点。​​https://leetcode.cn/p......
  • 判断二叉树是否为满二叉树
    判断二叉树是否为满二叉树作者:Grey原文地址:博客园:判断二叉树是否为满二叉树CSDN:判断二叉树是否为满二叉树满二叉树定义一个二叉树,如果每一个层的结点数都达到最大值......
  • Rust: Guess Gaming
     userand::Rng;usestd::{cmp::Ordering,io};fnmain(){println!("Hello,world!");letsecret_number=rand::thread_rng().gen_range(1,101);p......
  • 二叉树中序遍历非递归算法实现 cpp
    二叉树中序遍历非递归算法实现#include<iostream>//二叉树中序遍历非递归算法实现usingnamespacestd;#defineMAXSIZE100/*不让用递归,那就用栈!!*///树的结点......