Network coding is a technique in which transmitted data is encoded and decoded to enhance network throughput, reduce delays and construct a more robust network. Network coding has been used in many networks such as wireless sensor networks, traditional wireless networks, video multicast networks, Peer-to-Peer (P2P) networks and many others. Nowadays, with the emergence of Cognitive Radio Networks (CRNs), network coding is evolving from traditional wireless networks to CRNs. Therefore in this paper, our goal is to provide a survey of network coding specific for CRNs. In CRNs, a user (called Secondary User or SU) can intelligently judge and scrutinize the environment and then make decisions to adapt transmission schemes. Thus, SUs in CRNs employ network coding for data transmission. However, since CRNs is an emerging field, therefore, many technical issues exist. In order to provide a better understanding of the research challenges of Network Coding in CRNs, in this article, we present a detailed investigation and comparison of current state-of-the-art protocols and algorithms for Network Coding in Cognitive Radio Networks. Before this, in order to better understand network coding, we have discussed five illustrative examples of network coding, applications of network coding and network coding in traditional wireless networks, including classification and benefits, so that the readers can have handful knowledge of network coding.