Preorder
def preorder(node: Optional[TreeNode]) -> Iterator[TreeNode]:
if node:
yield node
yield from preorder(node.left)
yield from preorder(node.right)def preorder(node: Optional[TreeNode]) -> List[TreeNode]:
if not node:
return []
left = preorder(node.left)
right = preorder(node.right)
return [node.val] + left + rightdef preorder(node: Optional[TreeNode]) -> List[TreeNode]:
stack = []
result = []
while stack or node:
while node:
result.append(node)
stack.append(node)
node = node.left
node = stack.pop()
node = node.right
return result