WPL

前言

关于WPL,树的路径长度,哈夫曼树的介绍,请看:http://www.cnblogs.com/Braveliu/p/3453900.html

一般树的WPL

进行一次遍历,在叶节点出进行计算。进行遍历时,需要记录所遍历节点的高度,则WPL = WPL + T->weight * high。遍历可采用先,中,后序遍历。

// WPL
// WPL为全局变量,high设为局部变量即可
// 先序遍历后即可得WPL

void Preorder(Node *T, int high)
{
	if(T->lchild == NULL && T->rchild == NULL)
	{
		WPL += T->data * high;
		printf("Node:%d high=%d WPL=%d\n", T->data, high, WPL);
	}
	if(T->lchild != NULL)
	{
		Preorder(T->lchild, high+1);
	}
	if(T->rchild != NULL)
	{
		Preorder(T->rchild, high+1);
	}
}

哈夫曼树的WPL

没有必要先建立一颗哈夫曼树,只需每次选取结合中最小的2个节点,然后相加在放入集合。这就是哈夫曼树建立的思想。因此在选取两个节点后:

WPL = WPL + a + b,直到集合中仅有一个节点。

刚好有一道机试题目:

http://blog.youkuaiyun.com/staibin/article/details/20918167

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值