//最后得出minIndex1和minindex2中实体的weight最小 huffman[minIndex1].parent = i; huffman[minIndex2].parent = i;
huffman[i].left = minIndex1; huffman[i].right = minIndex2;
huffman[i].weight = huffman[minIndex1].weight + huffman[minIndex2].weight; }
return huffman; } #endregion
#region 选出叶子节点中最小的二个节点 /// <summary> /// 选出叶子节点中最小的二个节点 /// </summary> /// <param></param> /// <param>要查找的结点数</param> /// <param></param> /// <param></param> public void SelectNode(HuffmanTree[] huffman, int searchNodes, out int minIndex1, out int minIndex2) { HuffmanTree minNode1 = null;
HuffmanTree minNode2 = null;
//最小节点在赫夫曼树中的下标 minIndex1 = minIndex2 = 0;
//查找范围 for (int i = 0; i < searchNodes; i++) { ///只有独根树才能进入查找范围 if (huffman[i].parent == 0) { //如果为null,则认为当前实体为最小 if (minNode1 == null) { minIndex1 = i;
minNode1 = huffman[i];
continue; }
//如果为null,则认为当前实体为最小 if (minNode2 == null) { minIndex2 = i;
minNode2 = huffman[i];
//交换一个位置,保证minIndex1为最小,为后面判断做准备 if (minNode1.weight > minNode2.weight) { //节点交换 var temp = minNode1; minNode1 = minNode2; minNode2 = temp;
//下标交换 var tempIndex = minIndex1; minIndex1 = minIndex2; minIndex2 = tempIndex;
(编辑:焦作站长网)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|