📌  相关文章
📜  二叉树所有叶子节点的乘积(1)

📅  最后修改于: 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
总结

本文介绍了如何计算二叉树中所有叶子节点的乘积。我们可以使用深度优先搜索或广度优先搜索遍历二叉树,并判断当前节点是否为叶子节点。对所有叶子节点的值求乘积,即可得到答案。