Recursive solution:
# 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]:
def preorder(node):
if node:
yield node.val
yield from preorder(node.left)
yield from preorder(node.right)
return list(preorder(root))
Iterative solution:
# 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]:
result = []
stack = [root] if root else []
while stack:
node = stack.pop()
result.append(node.val)
for child in filter(None, [node.right, node.left]):
stack.append(child)
return result
Edited on 04/20/2021. Update iterative solution. Same approach can apply to N-array tree too.
Edited on 04/20/2021. Update recursive solution. Use 'yield' and 'yield from'.
No comments:
Post a Comment