If you flatten the tree with Euler tour, each subtree becomes a range [tin[v], tout[v]] in the flattened array. Subtree sum query for node = range sum query on [tin[v], tout[v]]. Update node = point update at position tin[v].
This is exactly what segment trees handle: point updates and range queries in . The range representation means you can use efficient range query structures to answer subtree questions in logarithmic time.