//任务:求二叉树所有叶结点的带权路径长度之和WPL(一个叶结点的带权路径长度=叶结点的权值*叶结点到根节点的路径长度(线的个数))
//算法思想:利用层次遍历记录层数,如遇到叶子结点则用叶子结点×(层数-1)
int WPL(BiTree& T)
{
SqQueue Q; InitQueue(Q);
BiTree p = T;int last, level = 0,wpl=0;
EnQueue(Q, p);
last = Q.rear;
while (!IsEmpty(Q))
{
DeQueue(Q, p);
if (p->lchild)
EnQueue(Q, p->lchild);
if (p->rchild)
EnQueue(Q, p->rchild);
if (Q.front == last)
{
level++;
last = Q.rear;
}
if (p->lchild == NULL && p->rchild == NULL)
{
wpl=wpl+p->data*(level-1);
}
}
return wpl;
}