Recursion: time O(N) space O(H) –> O(N) when tree not even
# 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 invertTree(self, root: TreeNode) -> TreeNode:
# main idea: post order
def helper(node): # can actually remove the helper function
#step1: base case: when node == None
if node == None:
return None
# step2: condition of swap: any of child node is not None,
node.left,node.right = helper(node.right) ,helper(node.left)
# step3: return parent node
return node
return helper(root)
Iterative time O(N) space O(N) <= O(N/2) due to leaf nodes in full binary Tree
# main idea: BFS using queue
# 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 invertTree(self, root: TreeNode) -> TreeNode:
# main idea: inorder
# step1: edge case => if root is empty
if not root:
return None
#step2 initialize queue
q = collections.deque()
q.append(root)
# step3: termination condition==> q is empty
while q:
# inorder
# step4: get current node
cur = q.popleft()
# step5: swap left right child
cur.left,cur.right = cur.right, cur.left
# step6 append valid children into queue
if cur.left:
q.append(cur.left)
if cur.right:
q.append(cur.right)
return root