Here is the implementation:
size = array of size n + 1
function dfs(v, parent):
size[v] = 1
for u in adj[v]:
if u != parent:
dfs(u, v)
size[v] = size[v] + size[u]
dfs(1, -1)
for v from 1 to n:
print size[v] - 1
Time: (visit each node once). Space: for the size array and recursion stack.