Use Reset or Randomize — tree is generated internally
1function minimax(node, α, β, maximizing):2 if node is leaf:3 return node.value45 if maximizing:6 value = -∞7 for each child:8 value = max(value, minimax(child, α, β, false))9 α = max(α, value)10 if α >= β: break // β-cutoff11 return value12 else:13 value = +∞14 for each child:15 value = min(value, minimax(child, α, β, true))16 β = min(β, value)17 if α >= β: break // α-cutoff18 return value
1interface GameNode {2 value?: number;3 children: GameNode[];4}56function minimax(7 node: GameNode,8 alpha: number,9 beta: number,10 maximizing: boolean11): number {12 if (node.value !== undefined) return node.value;1314 if (maximizing) {15 let value = -Infinity;16 for (const child of node.children) {17 value = Math.max(value, minimax(child, alpha, beta, false));18 alpha = Math.max(alpha, value);19 if (alpha >= beta) break;20 }21 return value;22 } else {23 let value = Infinity;24 for (const child of node.children) {25 value = Math.min(value, minimax(child, alpha, beta, true));26 beta = Math.min(beta, value);27 if (alpha >= beta) break;28 }29 return value;30 }31}