二叉树的WPLC++计算程序
时间: 2023-07-11 21:31:37 浏览: 88
以下是C++语言的二叉树加权路径长度计算程序:
```c++
#include <iostream>
#include <queue>
using namespace std;
// 二叉树节点结构体
struct TreeNode {
int val;
TreeNode* left;
TreeNode* right;
TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
};
// 计算二叉树的加权路径长度
int getWPL(TreeNode* root) {
if (root == nullptr) {
return 0;
}
queue<TreeNode*> q;
q.push(root);
int wpl = 0;
while (!q.empty()) {
int size = q.size();
for (int i = 0; i < size; i++) {
TreeNode* node = q.front();
q.pop();
if (node->left == nullptr && node->right == nullptr) { // 叶子节点
wpl += node->val;
}
if (node->left != nullptr) {
node->left->val += node->val; // 将左子节点的值累加上父节点的值
q.push(node->left);
}
if (node->right != nullptr) {
node->right->val += node->val; // 将右子节点的值累加上父节点的值
q.push(node->right);
}
}
}
return wpl;
}
int main() {
// 构造一棵二叉树
TreeNode* root = new TreeNode(1);
root->left = new TreeNode(2);
root->right = new TreeNode(3);
root->left->left = new TreeNode(4);
root->left->right = new TreeNode(5);
root->right->left = new TreeNode(6);
root->right->right = new TreeNode(7);
// 计算二叉树的加权路径长度
int wpl = getWPL(root);
cout << "二叉树的加权路径长度是:" << wpl << endl;
return 0;
}
```
该程序使用层次遍历的方法计算二叉树的加权路径长度,其中叶子节点的权重就是其值。对于每个非叶子节点,将其子节点的值累加上父节点的值,以便计算更深层节点的权重。最后累加所有叶子节点的权重即可得到二叉树的加权路径长度。
阅读全文