Game tree. Each position is a node and each legal move an edge. From the empty board there are 9 × 8 × 7 × ... move sequences, but games end early when someone completes a line, so the full tree has exactly 549,946 nodes (255,168 complete games).
Minimax. X picks the child with the largest value, O the smallest: V(s) = max V(child) on X's turn, min on O's, and +1 / 0 / -1 for a win / draw / loss at a terminal. The opening value is 0: with best play, tic-tac-toe is a draw.
Alpha-beta. Keep a window [α, β] of values that still matter. As soon as α ≥ β the rest of that node's moves cannot change the result and are skipped. It returns the same value as minimax. The saving depends on move order: in the best case it needs about bd/2 nodes instead of bd, so it can search twice as deep in the same time.
Symmetry. The square has 8 symmetries (4 rotations x mirror). Positions related by one have the same value, so only one move per symmetry class is expanded: 5,478 legal positions collapse to 765.
Random play. The exact probabilities are a weighted average over the tree: each of the n legal moves has weight 1/n. This gives X wins 58.49 %, draw 12.70 %, O wins 28.81 %: moving first matters when nobody thinks.
Depth-limited search. At the depth limit a non-terminal position is scored with a heuristic (weighted count of open lines for X minus O, scaled below 1). Shallow search plays plausibly but can miss forks that need 4-5 plies to see.
Simplifications. Node counts include every call to the recursive function (terminals too). Timings are from your browser's JavaScript and only indicative. The 3-ply picture shows the search actually performed; deeper levels are counted but not drawn.