Skip to content

1Kill2Steal/leetcode-trees-rs

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

60 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

LeetCode Trees in Rust

Build IconDocs IconVersion IconLicense Icon

Description

This library is made to make any LeetCoders using Rust have a better experience at solving their LeetCode (LC) problems. It uses cargo make to have reproducible sub-modules (check leetcode-trees-rs/solutions/README.md) as well as implementing the definition of the binary trees on LC.


Quick start on using the library:

For TreeNode values (Binary Trees)

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(())
}

For ListNode values (Singly Linked Lists)

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(())
}

LICENSE

The project is licensed under the MIT license.

Extra notes


Additional code templating can be found in This template file.

It's located at: solutions/lc0_general_nodes_template/src/main.rs


Additional documentation can be found in docs.rs.

About

A Rust library for Binary Tree Node and Singly Linked List ListNode LeetCode problems.

Topics

Resources

License

Stars

Watchers

Forks

Languages