>>> get_distrib(None) namedtuple("CoinsDistribResult", "0 2")
(node: TreeNode | None)
| 104 | |
| 105 | # Main calculation |
| 106 | def get_distrib(node: TreeNode | None) -> CoinsDistribResult: |
| 107 | """ |
| 108 | >>> get_distrib(None) |
| 109 | namedtuple("CoinsDistribResult", "0 2") |
| 110 | """ |
| 111 | |
| 112 | if node is None: |
| 113 | return CoinsDistribResult(0, 1) |
| 114 | |
| 115 | left_distrib_moves, left_distrib_excess = get_distrib(node.left) |
| 116 | right_distrib_moves, right_distrib_excess = get_distrib(node.right) |
| 117 | |
| 118 | coins_to_left = 1 - left_distrib_excess |
| 119 | coins_to_right = 1 - right_distrib_excess |
| 120 | |
| 121 | result_moves = ( |
| 122 | left_distrib_moves |
| 123 | + right_distrib_moves |
| 124 | + abs(coins_to_left) |
| 125 | + abs(coins_to_right) |
| 126 | ) |
| 127 | result_excess = node.data - coins_to_left - coins_to_right |
| 128 | |
| 129 | return CoinsDistribResult(result_moves, result_excess) |
| 130 | |
| 131 | return get_distrib(root)[0] |
| 132 |
no test coverage detected