用 Python 编写程序,查找树中非相邻节点的最大和

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

假设我们有一棵二叉树,我们必须找到在给定任何两个值都不能相邻的情况下可以获得的最大值和。

因此,如果输入如下

那么输出将是 17,因为 10、4、3 彼此不相邻。

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

  • 定义一个函数 f() 。这将获取节点
  • 如果节点为空,则
    • 返回 (0, 0)
  • (a, b) := f(节点左侧)
  • (c, d) := f(节点右侧)
  • 返回一对 (节点 + b + d 和 a + c, a + c 的最大值)
  • 从主方法调用 f(root) 并返回它的第一个值

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

示例

class TreeNode:
def __init__(self, data, left = None, right = None):
   self.val = data
   self.left = left
   self.right = right
def f(node):
   if not node:
      return 0, 0
   a, b = f(node.left)
   c, d = f(node.right)
   return max(node.val + b + d, a + c), a + c
class Solution:
   def solve(self, root):
      return f(root)[0]
ob = Solution()
root = TreeNode(1)
root.left = TreeNode(2)
root.right = TreeNode(10) root.left.left = TreeNode(4) root.left.right = TreeNode(3) print(ob.solve(root))

输入

root = TreeNode(1)
root.left = TreeNode(2)
root.right = TreeNode(10)
root.left.left = TreeNode(4)
root.left.right = TreeNode(3)

输出

17

相关文章


有用资源