Using structural reasoning, it easy to build an efficient one:
algQ[e : Alternatives[_Plus | _Times], z_] := VectorQ[List @@ e, algQ[#, z] &]
algQ[HoldPattern[Power][e_, r_?ExactNumberQ], z_] := algQ[e, z]
algQ[z_, z_] := True
algQ[w_, z_] /; FreeQ[w, z] := True
Let's see how it works
In[1]:= algQ[(z + Sqrt[1 + z^2])/(z + Sqrt[1 + z^(1/3)]), z]
Out[1]= True
In[2]:= algQ[(z + Sqrt[1 + z^2])/(z + Sqrt[1 + Exp[z]]), z]
Out[2]= False