求二叉树的带权路径WPL
发布时间
阅读量:
阅读量
求二叉树的带权路径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+=p->data*i;
wpl(p->lchild,i+1);
wpl(p->rchild,i+1);
}
return w;
}
int main()
{
int a[]={6,3,8,2,4,7,9};
struct BTNode *p=NULL;
for(int i = 0;i<7;i++)
Create(p,a[i]);
cout<<"先序遍历:";
preOrder(p);
cout<<endl<<"二叉树WPL:"<<wpl(p,1);
}
测试结果:

全部评论 (0)
还没有任何评论哟~
