📜  二叉树中所有单个节点的高度总和(1)

📅  最后修改于: 2023-12-03 15:06:19.850000             🧑  作者: Mango

二叉树中所有单个节点的高度总和

二叉树中所有单个节点的高度总和指的是树中所有叶子节点的深度之和。在计算这个值的时候,需要遍历整个二叉树,统计出叶子节点的深度并求和。

算法思路

在二叉树中,每一个节点都有一个深度值,表示它到根节点的距离。因此,我们可以通过递归遍历整个二叉树,依次计算出每个叶子节点的深度,并将深度值累加起来得到目标值。

具体实现过程如下:

  1. 首先,定义一个递归函数 getHeightSum(node: TreeNode, depth: int) -> int,表示计算以 node 为根节点的二叉树中所有叶子节点的深度之和,并且当前节点的深度为 depth

  2. getHeightSum 函数中,先判断当前节点是否存在。如果不存在,直接返回 0。

  3. 如果当前节点是叶子节点,返回它的深度值 depth

  4. 如果当前节点不是叶子节点,递归调用 getHeightSum 函数,分别计算左右子树中所有叶子节点的深度之和,并将它们相加作为当前节点的深度之和返回。

  5. 在主函数中,调用 getHeightSum 函数,从根节点开始计算二叉树中所有叶子节点的深度之和。

代码示例
class TreeNode:
    def __init__(self, val=0, left=None, right=None):
        self.val = val
        self.left = left
        self.right = right

def getHeightSum(node: TreeNode, depth: int) -> int:
    if not node:
        return 0
    if not node.left and not node.right:
        return depth
    return getHeightSum(node.left, depth + 1) + getHeightSum(node.right, depth + 1)
    
root = TreeNode(1)
root.left = TreeNode(2)
root.right = TreeNode(3)
root.left.left = TreeNode(4)
root.left.right = TreeNode(5)

result = getHeightSum(root, 0)
print(result)  # 输出:6

上面的代码示例中,首先定义了一个简单的 TreeNode 类,用于表示二叉树的节点。然后,定义了 getHeightSum 函数,实现了上述算法思路。

在主函数中,创建了一颗二叉树,并且调用 getHeightSum 函数,计算二叉树中所有叶子节点的深度之和。最后,输出结果为 6,表示这颗二叉树中所有叶子节点的深度之和为 6。