- define base case
- main logic w recursion
def dfs(root):
if not root: return 0
return 1 + dfs(root.left) + dfs(root.right)
- if not root: return 0
- return 1 + dfs(root.left) + dfs(root.right)
- define stack with tuple (node, value)
- iterate though stack if not empty
while stack:
node, value = stack.pop()
if node.left:
stack.append((node.left, value + node.left.val))
if node.right:
stack.append((node.right, value + node.right.val))
if not node.left and not node.right:
return value
- define queue with tuple (node, value)
- iterate though queue if not empty
while queue:
node, value = queue.pop(0)
if node.left:
queue.append((node.left, value + node.left.val))
if node.right:
queue.append((node.right, value + node.right.val))