题目
二叉树的带权路径长度(WPL)是二叉树中所有叶结点的带权路径长度之和。给定一棵二叉树T,采用二叉链表存储。结点结构为:
left | weight | right |
---|
其中叶结点的weight域保存该结点的非负权值。设root为指向T的根结点的指针,请设计求T的WPL的算法。
题解
分析
1、二叉链表
由于顺序存储的空间利用率低,二叉树一般采用链式存储结构。
2、存储结构
typedef struct BiTNode{
ElemType data;
struct BiTNode *lchild,*rchild;
}BiTNode, *BiTree;
3、二叉树的带权路径长度
二叉树的带权路径长度为每个叶子结点的深度与权值之积的总和。
代码
int WPL(BiTree *root){
return WPL1(root, 0);
}
int WPL1(BiTree *root, int d){
if(root->left==NULL && root->right==NULL)
return root->weight * d;
else
return(WPL1(root->left, d++)+WPL1(root->right, d++));
}