用 Python 编写程序来查找二叉树中出现频率最高的子树和

pythonserver side programmingprogramming更新于 2026/2/1 21:32:17

假设我们有一棵二叉树,我们必须找到出现频率最高的子树和。节点的子树和实际上是节点下所有值的总和,包括节点本身。

因此,如果输入如下

那么输出将是 3,因为它出现了两次 −一次作为左叶,一次作为 3 - 6 + 6 的总和。

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

  • count := 一个空映射
  • 定义一个函数 getSum() 。这将获取节点
  • 如果节点为空,则
    • 返回 0
  • mySum := getSum(节点左侧) + getSum(节点右侧) + 节点值
  • count[mySum] := count[mySum] + 1
  • 返回 mySum
  • 从主方法执行以下操作
  • getSum(root)

让我们看看下面的实现以便更好地理解 −

示例

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

相关文章


有用资源