1. 结构类型定义:
public
class
HuffmanTree
{
public int Weight { set ; get ; }
public HuffmanTree Left { set ; get ; }
public HuffmanTree Right { set ; get ; }
}
{
public int Weight { set ; get ; }
public HuffmanTree Left { set ; get ; }
public HuffmanTree Right { set ; get ; }
}
2. 构建树:
代码
public
static
HuffmanTree CreateHuffmanTree(
int
[] data)
{
if (data == null || data.Length < 1 )
{
throw new Exception( " data " );
}
IList < HuffmanTree > list = new List < HuffmanTree > ();
foreach (var d in data)
{
list.Add( new HuffmanTree
{
Weight = d,
Left = null ,
Right = null
});
}
HuffmanTree parent = new HuffmanTree();
HuffmanTree left = new HuffmanTree();
HuffmanTree right = new HuffmanTree();
while (list.Count > 1 )
{
left = list.First(item => item.Weight == list.Min(i => i.Weight));
list.Remove(left);
right = list.First(item => item.Weight == list.Min(i => i.Weight));
list.Remove(right);
parent = new HuffmanTree
{
Weight = left.Weight + right.Weight,
Left = left,
Right = right
};
list.Add(parent);
}
return parent;
}
{
if (data == null || data.Length < 1 )
{
throw new Exception( " data " );
}
IList < HuffmanTree > list = new List < HuffmanTree > ();
foreach (var d in data)
{
list.Add( new HuffmanTree
{
Weight = d,
Left = null ,
Right = null
});
}
HuffmanTree parent = new HuffmanTree();
HuffmanTree left = new HuffmanTree();
HuffmanTree right = new HuffmanTree();
while (list.Count > 1 )
{
left = list.First(item => item.Weight == list.Min(i => i.Weight));
list.Remove(left);
right = list.First(item => item.Weight == list.Min(i => i.Weight));
list.Remove(right);
parent = new HuffmanTree
{
Weight = left.Weight + right.Weight,
Left = left,
Right = right
};
list.Add(parent);
}
return parent;
}
3. 测试:
int
[] data
=
{
7
,
5
,
2
,
4
};
HuffmanTree tree = HuffmanCode.CreateHuffmanTree(data);
HuffmanTree tree = HuffmanCode.CreateHuffmanTree(data);