题目
IMG_20220530_200841.jpg
思想
递归遍历
代码
int WPL(BTree B, int deep) {
int leftWPL = 0, rightWPL = 0;
if(B->left != NULL)
leftWPL = WPL(B->left, deep + 1);
if(B->right != NULL)
rightWPL = WPL(B->right, deep + 1);
return leftWPL + deep * B->weight + rightWPL;
}
测试
int main() {
BTree B = create(2);
BTNode *n1 = create(3);
BTNode *n2 = create(4);
B->left = n1;
B->right = n2;
BTNode *n3 = create(5);
BTNode *n4 = create(6);
n2->left = n3;
n2->right = n4;
printf("result:%d\n", WPL(B, 1));
return 0;
}
捕获4.PNG
其他代码
#include<stdio.h>
#include<stdlib.h>
typedef struct node {
struct node *left, *right;
int weight;
}BTNode, *BTree;
BTNode* create(int data) {
BTNode *node = (BTNode*)malloc(sizeof(BTNode));
node->weight = data;
node->left = NULL;
node->right = NULL;
return node;
}