# Definition for a binary tree node. # class TreeNode: # def __init__(self, val=0, left=None, right=None): # self.val = val # self.left = left # self.right = right class Solution: def preorderTraversal(self, root: TreeNode) -> List[int]: res = [] while root: if root.left is None: res.append(root.val) root = root.right else: pre = root.left while pre.right and pre.right != root: pre = pre.right if pre.right is None: res.append(root.val) pre.right = root root = root.left else: pre.right = None root = root.right return res