coding_pk 0.13.0

A simple pk for coding solution
Documentation
use crate::tree::TreeNode;
use std::{cell::RefCell, rc::Rc, vec};

type TreeNodePtr = Option<Rc<RefCell<TreeNode>>>;

pub fn inorder_traversal(root: TreeNodePtr) -> Vec<i32> {
    let mut res = vec![];
    dfs(root, &mut res);

    res
}

fn dfs(curr_node: TreeNodePtr, res: &mut Vec<i32>) {
    if let Some(curr) = curr_node {
        dfs(curr.borrow().left.clone(), res);
        res.push(curr.borrow().val);
        dfs(curr.borrow().right.clone(), res);
    }
}

#[cfg(test)]
mod tests {
    use super::*;

    #[test]
    fn test_inorder_traversal() {
        let root = Some(Rc::new(RefCell::new(TreeNode {
            val: 1,
            left: None,
            right: Some(Rc::new(RefCell::new(TreeNode {
                val: 2,
                left: Some(Rc::new(RefCell::new(TreeNode::new(3)))),
                right: None,
            }))),
        })));
        assert_eq!(vec![1, 3, 2], inorder_traversal(root));
    }
}