fork download
  1. # your code goes here
  2. class Node:
  3.  
  4. def __init__(self, val=0, left=None, right=None):
  5. self.val = val
  6. self.left = left
  7. self.right = right
  8.  
  9.  
  10. def calculate_subtree_sums_binary_tree(root):
  11. subtree_sum = {}
  12.  
  13. def dfs(node):
  14. if not node:
  15. return 0
  16.  
  17. left_sum = dfs(node.left)
  18. right_sum = dfs(node.right)
  19.  
  20. total_sum = node.val + left_sum + right_sum
  21. subtree_sum[node] = total_sum
  22.  
  23. return total_sum
  24.  
  25. dfs(root)
  26. return subtree_sum
  27.  
  28.  
  29. if __name__ == "__main__":
  30. root = Node(10)
  31. root.left = Node(5)
  32. root.right = Node(-3)
  33. root.left.left = Node(3)
  34. root.left.right = Node(2)
  35. root.right.right = Node(11)
  36.  
  37. sums = calculate_subtree_sums_binary_tree(root)
  38.  
  39. for node, total in sums.items():
  40. print(f"Node(val={node.val}) -> Subtree Sum: {total}")
Success #stdin #stdout 0.08s 14028KB
stdin
Standard input is empty
stdout
Node(val=3) -> Subtree Sum: 3
Node(val=2) -> Subtree Sum: 2
Node(val=5) -> Subtree Sum: 10
Node(val=11) -> Subtree Sum: 11
Node(val=-3) -> Subtree Sum: 8
Node(val=10) -> Subtree Sum: 28