144. Binary Tree Preorder Traversal
https://leetcode.com/problems/binary-tree-preorder-traversal
Python
class Solution:
    def preorderTraversal(self, root: Optional[TreeNode]) -> List[int]:
        return self.travel([], root)
    def travel(self, result: List[int], root: Optional[TreeNode]):
        if not root:
            return
        result.append(root.val)
        self.travel(result, root.left)
        self.travel(result, root.right)
        return result
Rust
use std::rc::Rc;
use std::cell::RefCell;
impl Solution {
    pub fn preorder_traversal(root: Option<Rc<RefCell<TreeNode>>>) -> Vec<i32> {
        fn preorder(node: &Option<Rc<RefCell<TreeNode>>>, result: &mut Vec<i32>) {
            if let Some(node) = node {
                result.push(node.borrow().val);
                preorder(&node.borrow().left, result);
                preorder(&node.borrow().right, result);
            }
        }
        let mut result = vec![];
        preorder(&root, &mut result);
        result
    }
}