Use subtree DP when:
The input is a tree (acyclic, connected graph).
The problem asks for something aggregated (count, max, sum) over nodes or subtrees.
The answer for a node depends only on its descendants, not ancestors.
If you see these patterns, the approach is: define state on nodes, write recurrence combining children, implement DFS with post-order traversal. This structure solves most tree DP problems.