144. Binary Tree Preorder Traversal
# Medium, DFS
Solution 1: Non-recursive
# 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]:
# consider edge case
result = []
stack = []
if root == None:
return result
# regular case
stack.append(root)
while len(stack) > 0:
root = stack.pop()
result.append(root.val)
if root.right != None:
stack.append(root.right)
if root.left != None:
stack.append(root.left)
return resultSolution 2: Recursive
# 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 = []
self.traversal(root, res)
return res
def traversal(self, root, res):
# stop condition
if root == None:
return
# regular case
res.append(root.val)
self.traversal(root.left, res)
self.traversal(root.right, res)Solution 3: Divide & Conquer
Last updated