求二叉树的带权路径WPL,WPL是二叉树所有叶节点与深度乘积之和
代码:
#include <iostream>
#include <stdlib.h>
using namespace std;
typedef struct BTNode{
int data;
struct BTNode *lchild,*rchild;
}BTNode;
//二叉树样式
// 6
// 3 8
//2 4 7 9
//创建二叉树
bool Create(BTNode *&T, char x){
if(T==NULL){
T = (BTNode*)malloc(sizeof(BTNode));
T->data = x;
T->lchild=T->rchild=NULL;//生成结点
return true;
}
if(x<T->data)
Create(T->lchild,x);//构造左子树
else
Create(T->rchild,x);//构造右子树
}
//先序遍历二叉树
void preOrder(BTNode *p){
if(p!=NULL){
cout<<p->data;
preOrder(p->lchild);
preOrder(p->rchild);
}
}
//求带权路径 WPL(二叉树所有叶节点与深度乘积之和)
int wpl(BTNode *p,int i){
static int w=0;//静态代码块,在程序执行之前就已经创建,并在程序执行期间一直存在
//而不是每次在代码块开始执行时创建,在代码块执行完毕后会自动销毁,所以还是局部变量
if(p!=NULL){
if(p->lchild==NULL&&p->rchild==NULL)
w+&#