#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
#define ElemType int
typedef struct BitNode
{
ElemType weight;
struct BitNode* lchild, * rchild;
}BitNode, * BiTree;
ElemType GreatTree(BiTree& T)
{
ElemType data;
scanf_s("%d", &data);
if (data == 0)
T = NULL;
else
{
T = (BiTree)malloc(sizeof(BitNode));
if (T != NULL)
{
T->weight = data;
printf("输入%d的左子节点:", data);
GreatTree(T->lchild);
printf("输入%d的右子节点:", data);
GreatTree(T->rchild);
}
}
return 1;
}
int WPL_Pre(BiTree T, int deep)
{
static int wpl = 0;//static自动变量修改为静态变量,即只在第一次执行时创建,后面修改保存wpl的值
if (T->lchild == NULL && T->rchild == NULL)//当左右子树都为空的时候,累计权值
{
wpl = wpl + deep * T->weight;
}
if (T->lchild != NULL)//循环遍历左子树
{
WPL_Pre(T->lchild, deep + 1);
}
if (T->rchild != NULL)//循环遍历右子树
{
WPL_Pre(T->rchild, deep + 1);
}
return wpl;
}
int WPL(BiTree T)
{
return WPL_Pre(T, 0);//调用,树的深度从0开始
}
int main()
{
BiTree T;
printf("输入头节点(0为空节点):");
GreatTree(T);
int wpl = WPL(T);
printf("权值:%d", wpl);
}