Bootstrap

王道ch4-BiTree-19.求二叉树所有叶结点的带权路径长度之和WPL

//任务:求二叉树所有叶结点的带权路径长度之和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;
}

 

;