""" Pre-order, in-order and post-order traversal of binary trees. Author: Wenru Dong """ from typing import TypeVar, Generic, Generator, Optional T = TypeVar("T") class TreeNode(Generic[T]): def __init__(self, value: T): self.val = value self.left = None self.right = None # Pre-order traversal def pre_order(root: Optional[TreeNode[T]]) -> Generator[T, None, None]: if root: yield root.val yield from pre_order(root.left) yield from pre_order(root.right) # In-order traversal def in_order(root: Optional[TreeNode[T]]) -> Generator[T, None, None]: if root: yield from in_order(root.left) yield root.val yield from in_ord