PatternsTree TraversalDepth First SearchPreordergenerative def preorder(node: Optional[TreeNode]) -> Iterator[TreeNode]: if node: yield node yield from preorder(node.left) yield from preorder(node.right) recursive def preorder(node: Optional[TreeNode]) -> List: if not node: return [] left = preorder(node.left) right = preorder(node.right) return [node.val] + left + right iterative def 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 resultTree TraversalPrevious PageInorderNext Page