Decoding algorithms for linear block codes based on tree structure and their applicability to wireless and data storage systems