1.WPL:树中全部叶节点的带权路径之和
2.代码中所画的树为:
3.求上述WPL:
WPL=4*2(经过边数)+5*2(经过边数)=18
4.主要代码为:
int wpl(Node *ROOT,int high){
if (ROOT == NULL) {
return 0;
}
if(ROOT->lchild==NULL&&ROOT->rchild==NULL){
return ROOT->weight*high;
}
else{
return (wpl(ROOT->lchild,high+1)+wpl(ROOT->rchild,high+1));
}
}
5.完整代码为:
#include <stdio.h>
#include <stdlib.h>
typedef struct Node{
int weight;
struct Node *lchild,*rchild;
}Node;
int wpl(Node *ROOT,int high){
if (ROOT == NULL) {
return 0;
}
if(ROOT->lchild==NULL&&ROOT->rchild==NULL){
return ROOT->weight*high;
}
else{
return (wpl(ROOT->lchild,high+1)+wpl(ROOT->rchild,high+1));
}
}
int main() {
Node *ROOT=(Node *)malloc(sizeof(Node));
ROOT->weight=1;
ROOT->lchild=NULL;
ROOT->rchild=NULL;
Node *m=(Node *)malloc(sizeof(Node));
m->weight=2;
m->lchild=NULL;
m->rchild=NULL;
ROOT->lchild=m;
Node *n=(Node *)malloc(sizeof(Node));
n->weight=4;
n->lchild=NULL;
n->rchild=NULL;
m->rchild=n;
Node *a=(Node *)malloc(sizeof(Node));
a->weight=3;
a->lchild=NULL;
a->rchild=NULL;
ROOT->rchild=a;
Node *b=(Node *)malloc(sizeof(Node));
b->weight=5;
b->lchild=NULL;
b->rchild=NULL;
a->rchild=b;
printf("WPL为:%d",wpl(ROOT,0));
}
6.执行结果为: