export type StateType = number;
export namespace StateType {
    let Undecided: number;
    let Win: number;
    let Loss: number;
    let Tie: number;
    let DepthCapped: number;
    let NoMoves: number;
}
/**
 * @template State, Action
 */
export class StateNode<State, Action> {
    /**
     * How deep is the node in the tree
     * @type {number}
     */
    depth: number;
    /**
     *
     * @type {number}
     */
    wins: number;
    /**
     * Number of leses in the subtree of this state
     * @type {number}
     */
    losses: number;
    /**
     * total number of explored playouts
     * @type {number}
     */
    playouts: number;
    /**
     *
     * @type {number}
     */
    heuristicValue: number;
    /**
     * parent node, previous state
     * @type {null|StateNode}
     */
    parent: null | StateNode<any, any>;
    /**
     *
     * @type {null|MoveEdge[]}
     */
    moves: null | MoveEdge<any>[];
    /**
     *
     * @type {StateType}
     */
    type: StateType;
    bubbleUpHeuristicScore(): void;
    /**
     * Aggregate heuristic score from children
     */
    aggregateHeuristicScore(): void;
    /**
     * @param state
     * @param {function(State, source:StateNode):MoveEdge[]} computeValidMoves
     * @param computeTerminalFlag
     * @returns {number} number of children
     */
    expand(state: any, computeValidMoves: any, computeTerminalFlag: any): number;
    /**
     *
     * @param {number} playouts
     * @param {number} wins
     * @param {number} losses
     */
    addPlayouts(playouts: number, wins: number, losses: number): void;
    /**
     * Whenever this is a terminal state or not (win/loss)
     * @returns {boolean}
     */
    isTerminal(): boolean;
    /**
     *
     * @returns {boolean}
     */
    isExpanded(): boolean;
    /**
     *
     * @returns {MoveEdge[]}
     */
    pickBestMoves(): MoveEdge<any>[];
    /**
     *
     * @param {function(StateNode)} visitor
     */
    traverse(visitor: (arg0: StateNode<any, any>) => any): void;
}
import { MoveEdge } from "./MoveEdge.js";
//# sourceMappingURL=StateNode.d.ts.map