📜  二叉树中所有父子差异的总和(1)

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

二叉树中所有父子差异的总和

简介

在一棵二叉树中,每个节点都有一个整数值。我们定义「父子差异」为每个父节点与其子节点之间的差值的绝对值。找到二叉树中所有父子差异的总和。

示例

例如,给定以下二叉树:

       8
      / \
     3   10
    / \    \
   1   6    14
      / \   /
     4   7 13

这棵二叉树中所有父子差异的总和为:

|8-3| + |8-10| + |3-1| + |3-6| + |10-14| + |1-4| + |1-7| + |14-13| = 44
解题思路

这道题可以通过递归的方式来解决。对于一棵二叉树,我们需要计算每个父节点与其子节点的差异,并将所有的差异值累加求和。

我们可以定义一个递归函数,传入当前节点和其父节点的值。首先判断当前节点是否为空,如果是,则返回0。否则,我们计算当前节点与其父节点值的差异绝对值,并递归计算其左右子树的父子差异总和。

代码实现
def parentChildDifferenceSum(root, parentVal):
    if root is None:
        return 0
        
    diff = abs(root.val - parentVal)
    leftSum = parentChildDifferenceSum(root.left, root.val)
    rightSum = parentChildDifferenceSum(root.right, root.val)
    
    return diff + leftSum + rightSum
复杂度分析
  • 时间复杂度:O(n),其中 n 是二叉树中的节点数。我们需要遍历每个节点一次。
  • 空间复杂度:O(h),其中 h 是二叉树的高度。递归函数的栈空间取决于树的高度。