📅  最后修改于: 2023-12-03 14:49:01.395000             🧑  作者: Mango
在二叉树中,叶子节点是指没有子节点的节点。本文将介绍如何计算二叉树中所有叶子节点的乘积。
我们可以先遍历二叉树,找到所有的叶子节点。然后将这些叶子节点的值相乘,即可得到二叉树所有叶子节点的乘积。下面是具体的实现方法。
我们可以使用深度优先搜索(DFS)或广度优先搜索(BFS)遍历二叉树。这里以DFS为例。遍历过程中,我们需要判断当前节点是否为叶子节点。
def traverse(root, leaves):
if not root:
return
if not root.left and not root.right: # 判断是否为叶子节点
leaves.append(root.val)
traverse(root.left, leaves)
traverse(root.right, leaves)
遍历完成后,我们得到了所有叶子节点的值。我们可以使用一个循环计算它们的乘积。
def leaf_product(root):
leaves = []
traverse(root, leaves) # 深度优先遍历二叉树,获取所有叶子节点的值
product = 1
for leaf in leaves:
product *= leaf
return product
我们可以使用以下的二叉树来演示上述算法。
1
/ \
2 3
/ \ / \
4 5 6 7
对这棵二叉树,我们得到的叶子节点是 [4, 5, 6, 7]
,它们的乘积为 4 * 5 * 6 * 7 = 840
。
class TreeNode:
def __init__(self, val=0, left=None, right=None):
self.val = val
self.left = left
self.right = right
root = TreeNode(1)
root.left = TreeNode(2)
root.right = TreeNode(3)
root.left.left = TreeNode(4)
root.left.right = TreeNode(5)
root.right.left = TreeNode(6)
root.right.right = TreeNode(7)
print(leaf_product(root)) # 输出 840
本文介绍了如何计算二叉树中所有叶子节点的乘积。我们可以使用深度优先搜索或广度优先搜索遍历二叉树,并判断当前节点是否为叶子节点。对所有叶子节点的值求乘积,即可得到答案。