1)算法基本设计思想:
基于先序遍历,用一个静态变量static记录wpl,把每一个结点的深度作为参数进行传递
若结点是叶子结点,则变量wpl加上该点深度与权值的乘积
若结点非叶子结点,则左子树不为空时,对左子树递归,右子树不为空对右子树递归,深度参数为本节点深度加一。
2)数据类型定义:
3)c语言描述:
//数据类型定义
typedef struct {
int weight;
struct BiTree *lchild, *rchild;
}BiTNode,*BiTree;
int WPL(BiTree root){
return wpl_preorder(root,0);
}
int wpl_preorder(BiTree root,int deep){
static int wpl=0;
if(root->lchild==NULl&&root->rchild==NULL)
wpl+=deep*root->weight;
if(root->lchild!=NULL){
wpl_preorder(root->lchild,deep+1);
}
if(root->rchild!=NULL){
wpl_preorder(root->rchild,deep+1);
}
return wpl;
}