Given the root of a binary tree, return the values in pre-order traversal: visit the current node, then the left subtree, then the right subtree. Implement the traversal and handle an empty tree correctly.
0 <= number of nodes <= 10^4-10^4 <= Node.val <= 10^4