📅  最后修改于: 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$。