Nodes are already aware of which thread they belong to, correct? (something is aware of it, anyway, because each sub-node has "in thread" links when viewed). So maintain a descendant counter in each root node that is incremented each time a new node in the thread is created (or decremented when a descendant node is reaped).
With such a count, thread activity is a simple comparison of the last-seen count and the current count for that thread.
Is this really that much more overhead?
Matt