minmax

import math

def minimax(tree, depth, isMax):

# If we reach leaf level
if depth == 1:
if isMax:
return max(tree)
else:
return min(tree)

# Maximizing player
if isMax:
best = -math.inf
for branch in tree:
value = minimax(branch, depth-1, False)
best = max(best, value)
return best

# Minimizing player
else:
best = math.inf
for branch in tree:
value = minimax(branch, depth-1, True)
best = min(best, value)
return best


# Tree from diagram
tree = [
[3,5,2,9],
[12,5,6],
[23,25,1]
]

depth = 2

print("Optimal Value:", minimax(tree, depth, True))