Python程序:查找二叉树中最频繁的子树和


假设我们有一个二叉树,我们需要找到出现频率最高的子树和。节点的子树和是该节点下所有值的总和,包括节点本身。

因此,如果输入如下所示:

则输出将为 3,因为它出现了两次——一次作为左叶子节点,一次作为 3 - 6 + 6 的和。

为了解决这个问题,我们将遵循以下步骤:

  • count := 一个空映射
  • 定义一个函数 getSum()。这将接收节点作为参数。
  • 如果节点为空,则
    • 返回 0
  • mySum := getSum(节点的左子节点) + getSum(节点的右子节点) + 节点的值
  • count[mySum] := count[mySum] + 1
  • 返回 mySum
  • 在主方法中执行以下操作:
  • getSum(根节点)

让我们看看下面的实现来更好地理解:

示例

 在线演示

from collections import defaultdict
class TreeNode:
   def __init__(self, data, left = None, right = None):
      self.val = data
      self.left = left
      self.right = right
class Solution:
   def solve(self, root):
      count = defaultdict(int)
      def getSum(node):
         if not node:
            return 0
         mySum = getSum(node.left) + getSum(node.right) + node.val
         count[mySum] += 1
         return mySum
      getSum(root)
      return max(count, key=count.get)
ob = Solution()
root = TreeNode(-6)
root.left = TreeNode(3)
root.right = TreeNode(6) print(ob.solve(root))

输入

root = TreeNode(-6)
root.left = TreeNode(3)
root.right = TreeNode(6)

输出

3

更新于:2020年10月19日

147 次查看

开启您的职业生涯

完成课程获得认证

开始学习
广告