Preorder Traversal
Recursion
class Solution:
def preorderTraversal(self, root: TreeNode) -> List[int]:
if not root: return []
return [root.val] + self.preorderTraversal(root.left) + self.preorderTraversal(root.right)
Iteration
class Solution:
def preorderTraversal(self, root: TreeNode) -> List[int]:
if not root: return []
stack = [root]
res = []
while stack:
top = stack.pop()
res.append(top.val)
if top.right:
stack.append(top.right)
if top.left:
stack.append(top.left)
return res
Morris
class Solution:
def preorderTraversal(self, root: TreeNode) -> List[int]:
res = []
while root:
if not root.left:
res.append(root.val)
root = root.right
else:
predecessor = root.left
while predecessor.right and predecessor.right != root:
predecessor = predecessor.right
if not predecessor.right:
res.append(root.val)
predecessor.right = root
root = root.left
else:
predecessor.right = None
root = root.right
return res
</