【2014统考真题】二叉树的带权路径长度(WPL)是二叉树中所有叶结点的带权路径之和。给定一棵二叉树T,采用二叉链表存储,结点结构为 其中叶结点的weight域保存该结点的非负权值。设root为指向T的根节点的指针,请设计求T的WPL的算法
时间: 2024-09-30 15:05:13 浏览: 106
为了计算给定二叉树T的带权路径长度(WPL),我们可以采用递归的方式。由于二叉树的每个节点都有一个权重(weight)字段,我们只需要对每一个叶子节点和它们到根节点的路径贡献其权重。对于非叶子节点,它们不会直接贡献到WPL,但会通过他们的左右子节点间接影响。
下面是算法步骤:
1. 定义一个辅助函数`getWeightedPathLength(node)`,输入为一个节点`node`,返回值为其到根节点的带权路径长度加上自身的权重。
- 如果`node`是叶子节点(即`node.left == null && node.right == null`),返回`node.weight`;
- 否则,递归地计算左子树和右子树的带权路径长度,然后将结果加起来,再加上当前节点的权重:`return getWeightedPathLength(node.left) + getWeightedPathLength(node.right) + node.weight`。
2. 最后,在主函数中调用`getWeightedPathLength(root)`,因为根节点也是计算的一部分。
Python伪代码示例:
```python
def getWeightedPathLength(node):
if not node:
return 0
elif not node.left and not node.right: # 叶子节点
return node.weight
else:
left_path = getWeightedPathLength(node.left)
right_path = getWeightedPathLength(node.right)
return left_path + right_path + node.weight
# 主函数
root = ... # 根节点指针
wpl = getWeightedPathLength(root)
print("二叉树的带权路径长度(WPL):", wpl)
```
阅读全文