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

📅  最后修改于: 2023-12-03 14:56:53.221000             🧑  作者: Mango

计算二叉树每个节点子树深度总和

给定一颗二叉树,现在需要计算每个节点的子树深度总和。

思路

使用递归进行遍历,对于每个节点,求它的左右子树深度,并将其加入到该节点的值中。然后递归到左右子节点继续计算。最终,根节点的值即为二叉树每个节点子树深度总和。

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

class Solution:
    def subtreeSum(self, root: TreeNode) -> int:
        def dfs(node: TreeNode) -> int:
            if not node:
                return 0
            left_depth = dfs(node.left)
            right_depth = dfs(node.right)
            node.val += left_depth + right_depth
            return node.val
            
        dfs(root)
        return root.val
复杂度分析
  • 时间复杂度:$$O(n)$$,其中n为二叉树节点数,需要遍历每个节点。
  • 空间复杂度:$$O(h)$$,其中h为二叉树高度,由于采用递归方式实现,需要调用h次dfs函数,栈空间复杂度为O(h)。