Show off your tree analysing toolbox
Ruby, 122 110 bytes

f=-&gt;s{-&gt;t{t.to_s.scan(s).size}}
s=f[?[]
d=-&gt;t{[-1,*t.map(&amp;d)].max+1}
b=f['[]']
g=-&gt;t{([t.size]+t.map(&amp;g)).max}


Inspired by Neil's JavaScript solution. d and g are just translations from his JS to Ruby. For s and b I'm using string conversion tricks.

Shaved a few bytes off of s and b by adding the helper f, and a few more byte off of d and g thanks to Jordan.