This is most likely because you have unindexed foreign key.
You have deleted the children first, but some other transactions may have inserted data in the mean time, so Oracle has to check again when you delete from a parent table.
If a foreign key is not paired with an index, Oracle has to get a lock on the whole child table to make sure that no other concurrent uncommited transaction has inserted a potentially orphan child.
This lock can take a lot of time to acquire, even on small busy tables.
Adding indexes solves this problem.