#leetcode #tree-node #binary-tree #problem #solution #library #reproducible

leetcode-trees-rs

A Rust 库,用于解决树节点 LeetCode 问题

19 个版本

0.1.149 2024 年 5 月 15 日
0.1.147 2024 年 5 月 14 日
0.1.132 2024 年 3 月 21 日

#460 in 数据结构

MIT 许可证

41KB
339

LeetCode Trees in Rust

Build IconDocs IconVersion IconLicense Icon

描述

此库旨在使任何使用 Rust 的 LeetCoders 在解决 LeetCode (LC) 问题时有更好的体验。它使用 cargo make 以具有可重复的子模块(检查 leetcode-trees-rs/solutions/README.md),以及实现 LC 上的二叉树定义。


使用库的快速入门

对于 TreeNode 值(二叉树)

use leetcode_trees_rs::{
    prelude::*,
    utils::{symmetric_tree, tree, TreeNode},
};

struct Solution {} // Assigning an empty struct to make a solution impl block.

use std::{cell::RefCell, rc::Rc};
impl Solution {
    pub fn your_leetcode_fn() {}
}

#[cfg(test)]
mod tests {
    #[test]
    fn tests() {
        // . . .
    }
}

fn main() -> Result<()> {
    // Equivalent of:
    //        1
    //    2       2
    //  3   3   3   3
    let symmetric_tree_node = symmetric_tree!(1, 2, 3);

    // Equivalent of:
    //                   1
    //         2                   #
    //    3         3         #         #
    // 4     #   #     #   #     #   #     #
    let custom_tree = tree!(&[
        vec![Some(1)],
        vec![Some(2), None],
        vec![Some(3), Some(3)],
        vec![Some(4)],
    ]);

    // If you want trees that only branch to the left or to the right then
    // there're also the `left_tree!()` and `right_tree!()` macros!
    // Those macros can help you write your test runs easier.

    Ok(())
}

对于 ListNode 值(单链表)

use leetcode_trees_rs::{list_node, prelude::*, utils::ListNode};

struct Solution {} // Assigning an empty struct to make a solution impl block.

use std::{cell::RefCell, rc::Rc};
impl Solution {
    pub fn your_leetcode_fn() {}
}

#[cfg(test)]
mod tests {
    #[test]
    fn tests() {
        // . . .
    }
}

fn main() -> Result<()> {
    // This is the very cumbersome manual way of writing your ListNode structs.
    let some_list = ListNode {
        val: 1,
        next: Some(Box::new(ListNode {
            val: 2,
            next: Some(Box::new(ListNode::new(3))),
        })),
    };
    // And this is the easier way:
    let another_list = list_node!(1, 2, 3);

    assert_eq!(some_list, another_list);

    Ok(())
}

许可证

本项目采用 MIT 许可证。

额外说明


更多代码模板可以在 此模板文件 中找到。

它位于: solutions/lc0_general_nodes_template/src/main.rs


更多文档可以在 docs.rs 中找到。

依赖项

33–47MB ~
~682K SLoC