Skip to content

Commit 4002cb3

Browse files
committed
Use the post-order iterator in FindSubgameRoots
1 parent c7ab647 commit 4002cb3

File tree

2 files changed

+4
-13
lines changed

2 files changed

+4
-13
lines changed

src/games/gametree.cc

Lines changed: 3 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1244,22 +1244,13 @@ std::map<GameInfosetRep *, GameNodeRep *> FindSubgameRoots(const Game &p_game)
12441244
}
12451245

12461246
SubgameScratchData data;
1247-
const int num_nodes = p_game->NumNodes();
12481247

1249-
// Collect nodes in ascending order (depth-first traversal) -- TODO: Replace with proper iterator
1250-
std::vector<GameNodeRep *> nodes_ascending;
1251-
nodes_ascending.reserve(num_nodes);
1252-
for (const auto &node : p_game->GetNodes()) {
1253-
nodes_ascending.push_back(node.get());
1254-
}
1255-
1256-
// Process in reverse order (descending node numbers, children before parents)
1257-
for (auto it = nodes_ascending.rbegin(); it != nodes_ascending.rend(); ++it) {
1258-
auto *node = *it;
1248+
// Process nodes in postorder
1249+
for (const auto &node : p_game->GetNodes(TraversalOrder::Postorder)) {
12591250
if (node->IsTerminal() || data.dsu_parent.count(node->GetInfoset().get())) {
12601251
continue;
12611252
}
1262-
GenerateComponent(data, node);
1253+
GenerateComponent(data, node.get());
12631254
}
12641255

12651256
std::map<GameInfosetRep *, GameNodeRep *> result;

src/games/gametree.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,7 @@ class GameTreeRep : public GameExplicitRep {
8989
/// Returns the largest payoff to the player in any play of the game
9090
Rational GetPlayerMaxPayoff(const GamePlayer &) const override;
9191
bool IsAbsentMinded(const GameInfoset &p_infoset) const override;
92-
GameNode GetSubgameRoot(GameInfoset infoset) const override
92+
GameNode GetSubgameRoot(const GameInfoset &infoset) const override
9393
{
9494
if (m_infosetSubgameRoot.empty()) {
9595
const_cast<GameTreeRep *>(this)->BuildSubgameRoots();

0 commit comments

Comments
 (0)