//四个叶子节点的循环 for (int i = 0; i < leafNum; i++) { //单个字符的编码串 string codeTemp = string.Empty;
current = i;
//第一次获取最左节点 parent = huffman[current].parent;
while (parent != 0) { //如果父节点的左子树等于当前节点就标记为0 if (current == huffman[parent].left) codeTemp += "0"; else codeTemp += "1";
current = parent; parent = huffman[parent].parent; }
huffmanCode[i] = new string(codeTemp.Reverse().ToArray()); } return huffmanCode; } #endregion
#region 对指定字符进行压缩 /// <summary> /// 对指定字符进行压缩 /// </summary> /// <param></param> /// <param></param> /// <param></param> public string Encode(string[] huffmanCode, string[] alphabet, string test) { //返回的0,1代码 string encodeStr = string.Empty;
//对每个字符进行编码 for (int i = 0; i < test.Length; i++) { //在模版里面查找 for (int j = 0; j < alphabet.Length; j++) { if (test[i].ToString() == alphabet[j]) { encodeStr += huffmanCode[j]; } } }
return encodeStr; } #endregion
#region 对指定的二进制进行解压 /// <summary> /// 对指定的二进制进行解压 /// </summary> /// <param></param> /// <param></param> /// <param></param> /// <param></param> /// <returns></returns> public string Decode(HuffmanTree[] huffman, int huffmanNodes, string[] alphabet, string test) { string decodeStr = string.Empty;
//所有要解码的字符 for (int i = 0; i < test.Length; ) { int j = 0; //赫夫曼树结构模板(用于循环的解码单个字符) for (j = huffmanNodes - 1; (huffman[j].left != 0 || huffman[j].right != 0); ) { if (test[i].ToString() == "0") { j = huffman[j].left; } if (test[i].ToString() == "1") { j = huffman[j].right; } i++; } decodeStr += alphabet[j]; } return decodeStr; }
#endregion } }
(编辑:焦作站长网)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|