I just use a simple vector<Action>
.
Pseudo code :
class Node {
vector<Action> actions;
Game game;
double eval;
}
Node parent = nextNodeToExpand();
vector<Action> actions = computePossibleActions(parent);
for (Action action : actions) {
Node child = new Node();
child.actions = parent.actions();
child.actions.push(action);
child.game = parent.game;
child.game.play(action);
child.eval = parent.eval() + child.game.eval() * pow(COEF_PATIENCE, depth);
addChildToTheListOfNode(child);
}