📌  相关文章
📜  给定二叉树每个节点的子树深度总和(1)

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

给定二叉树每个节点的子树深度总和

给定一棵二叉树,你需要计算每个节点的子树深度总和。维护一个变量 $ans$ 表示结果,同时定义一个递归函数 $depth$,$depth(node)$ 返回以 $node$ 为根节点的子树深度之和。

$depth(node)$ 的计算方式:$depth(node) = depth(node.left) + depth(node.right) + (左子树节点个数 * 右子树节点个数)$。

算法时空复杂度分析:时间复杂度 $O(n)$,空间复杂度 $O(n)$。

class Solution:
    def sumOfLeftLeaves(self, root: TreeNode) -> int:
        self.ans = 0
        def depth(node):
            if not node: return 0
            left, right = depth(node.left), depth(node.right)
            self.ans += left * right
            return left + right + 1
        depth(root) # 递归
        return self.ans

输入样例:

               1
             /   \
            2     3
           / \   / \
          4   5 6   7

输出样例:

53

其中 2 的子树深度和为 1,5 的子树深度和为 2,由此可以得出 $ans=2 \times 5 + 1 \times 1 + 1 \times 1 + 2 \times 2 + 2 \times 2 = 53$。