बच्चा can be used as a catch-all term for a child of either gender. You use बच्ची only when you want to emphasise that the child is female. This is similar to how बिल्ली is a 'cat' and you use बिल्ला only when you want to say 'male cat'.
लड़का/लड़की are more explicitly gendered terms. Also, similar to boy/girl, they can be applied both to children and young adults.
Eg: बच्चे मैदान में खेल रहे हैं - The children are playing in the playground (says nothing about the gender of the children)
लड़के मैदान में खेल रहे हैं - The boys are playing in the playground (tells you for sure that everyone playing is male).