返回

一二叉树中叶子节点值相等的数目统计

前端

二叉树简介

二叉树是一种常用的数据结构,它由一系列结点组成,其中每个结点都至多有两个子结点。二叉树的结点通常存储数据,而子结点则指向其他结点。二叉树可以用来表示各种各样的数据结构,包括列表、堆栈和队列。

问题

现在我们给出这样一个问题:给定一棵二叉树,我们如何统计其中叶子节点值相等的路径的数目?

算法分析

为了解决这个问题,我们可以使用递归算法。递归算法是一种解决问题的策略,它将一个复杂的问题分解成更小的子问题,然后依次解决这些子问题,直到最终解决整个问题。

在我们的问题中,我们可以将二叉树分解成更小的子树,然后统计每个子树中叶子节点值相等的路径的数目。最终,我们将这些子树的统计结果加起来,就可以得到整个二叉树中叶子节点值相等的路径的数目。

算法实现

def count_equal_leaf_paths(root):
    """
    统计一棵二叉树中,叶子节点值相等路径的数目。

    参数:
    root: 二叉树的根结点。

    返回值:
    叶子节点值相等路径的数目。
    """
    # 如果二叉树为空,则返回0。
    if root is None:
        return 0

    # 如果二叉树只有根结点,则返回1。
    if root.left is None and root.right is None:
        return 1

    # 统计左子树中叶子节点值相等路径的数目。
    left_count = count_equal_leaf_paths(root.left)

    # 统计右子树中叶子节点值相等路径的数目。
    right_count = count_equal_leaf_paths(root.right)

    # 如果左右子树的根结点的值相等,则返回左右子树中叶子节点值相等路径的数目之和。
    if root.val == root.left.val and root.val == root.right.val:
        return left_count + right_count

    # 否则,返回左右子树中叶子节点值相等路径的数目之和。
    return left_count + right_count


## 示例代码

```python
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)

count = count_equal_leaf_paths(root)
print(count)

输出:

2